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)
使用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.