我正在尝试用链接替换文本。我现在使用的正则表达式替换了所有匹配,但我只想替换前两次出现。
它应该用链接替换所有出现的find me
,除非它位于或标记中。
https://regex101.com/r/6R2ydW/1 http://www.phpliveregex.com/p/nLI
我当前的正则表达式:
/<(a|h[1-6])[^>]*>(?:[a-zA-Z0-9\s\'\-\.,]|(?:<(.*)>.*<\/\1>))*<\/(a|h[1-6])>(*SKIP)(*FAIL)|\b(Find Me)\b(?=[^>]*(?:<|$))/ig
我的虚拟内容:
Lorem ipsum find me and skip when
<b>find me</b> is inside a link tag
like this find me
<h1>find me in the title</h1>
<a href="#">here you can find me too</a>.
<h2 class="heading">Lorem Ipsum dolor find me here too</h2>
<table>
<tr><td>Cell 1 a</td><td>Find me</td></tr>
<tr><td>Cell 2 with find me</td><td><a href="#foo">Find me</a></td></tr>
</table>
<h3 class="heading">Duomo Di find me San Martino</h3>
<p>FIND ME as well</p>
我的PHP preg_replace:
$text = 'Lorem ipsum find me and skip when
<b>find me</b> is inside a link tag
like this find me
<h1>find me in the title</h1>
<a href="#">here you can find me too</a>.
<h2 class="heading">Lorem Ipsum dolor find me here too</h2>
<table>
<tr><td>Cell 1 a</td><td>Find me</td></tr>
<tr><td>Cell 2 with find me</td><td><a href="#foo">Find me</a></td></tr>
</table>
<h3 class="heading">Duomo Di find me San Martino</h3>
<p>FIND ME as well</p>';
$regex = "/<(a|h[1-6])[^>]*>(?:[a-zA-Z0-9\s\'\-\.,]|(?:<(.*)>.*<\/\1>))*<\/(a|h[1-6])>(*SKIP)(*FAIL)|\b(" . preg_quote('find me') . ")\b(?=[^>]*(?:<|$))/i";
$text = preg_replace($regex, sprintf('<a href="%s">$4</a>', 'http://example.com'), $text);
希望一位程序员可以帮助我:)
答案 0 :(得分:0)
使用(对我来说)未知$limit
参数修正了它。
$text = preg_replace($regex, sprintf('<a href="%s">$4</a>', 'http://example.com'), $text, $limit = 2);