我想更改一个字符串:
<a href....>*</a>
为:
<article><a href=....>*</a></article>
我试过这个,但我对RegEx的理解太糟糕了。
$n = '/<a (.*)[^>]>/';
$h = '/<article><a(.*)[^>]>/i','/<\/a></articla>/';
$reg = preg_replace($n, $h, $content);
答案 0 :(得分:1)
您的解决方案将匹配&lt; a href ...&gt;但不是结束元素。
试试这个:
$n = '/(<a [^>]*>([^<]*<(\/[^a])|[^\/])*\/a>)/i';
$h = '<article>${1}</article>';
$reg = preg_replace($n, $h, $content);
修改强>
现在尊重子元素
Explenation:
<a [^>]*>
匹配开始标记。
(
[^<]*<
找到下一个标签。
(\/[^a])|[^\/]
)*
确保下一个标记不是结束&lt; / a&gt;所以匹配所有其他标签。
\/a>
最后匹配结束&lt; / a&gt;。 (注意:&lt;已经匹配)。
答案 1 :(得分:0)
如果$content
只是一个“字符串”而不是html,那么只需采用简单的方法:
$content = str_replace('</a>','</a></article>',str_replace('<a href=','<article><a href=',$content));
简单,干净,无需正则表达式。
如果$content
不只是一个“字符串”,但它是html,那么也不是str_replace,也不是正则表达式。你需要一个html解析器。