使用正则表达式重命名类

asp*_*aga 0 php regex html-parsing

我如何使用RegEx查找<a class="modal>并替换它<a class="modal-link"

我试过了:

preg_replace('/<a class="(.*?)">(.*?)<\/a>/i', '<a class="$1-link">$2</a>', $input);
Run Code Online (Sandbox Code Playgroud)

但它不起作用.请有人指出我正确的解决方案吗?

顺便说一句:我是Joomla 2.5首页编辑内容页面的样式,批准的用户可以发布文章.我希望在我的正则表达式上应用的字符串来自:

<?php echo $this->form->getInput('image_intro', 'images'); ?>
Run Code Online (Sandbox Code Playgroud)

它生成这个HTML:

<a class="modal" ...>Choose</a>
Run Code Online (Sandbox Code Playgroud)

nic*_*ckb 6

使用PHP DOMDocument类的非正则表达式解决方案将是:

// Load up the HTML in DOMDocument
$doc = new DOMDocument;
$doc->loadHTML( '<a class="modal">Stuff</a>'); // Or: $doc->loadHTML( $this->form->getInput('image_intro', 'images'));

// Create a new XPath object to find the correct <a> tags
$xpath = new DOMXPath( $doc);

// Iterate over all <a class="modal"> tags
foreach( $xpath->query( "//a[@class='modal']") as $a) {
    // Set the class attribute correctly
    $a->setAttribute( 'class', $a->getAttribute( 'class') . '-link');
    echo $doc->saveHTML( $a); // Print the fixed <a> tag
}
Run Code Online (Sandbox Code Playgroud)

这将输出类似于:

<a class="modal-link">Stuff</a>
Run Code Online (Sandbox Code Playgroud)

这种方法比基于正则表达式的方法更健壮,更稳定,特别是如果您从用户输入获取HTML.