我使用preg_replace在文本块中使用以下代码生成上下文链接:
$contextualLinkStr = 'mytext';
$content = 'My text string which includes MYTEXT in various cases such as Mytext and mytext. However it also includes image tags such as <img src="http://www.myurl.com/mytext-1.jpg">';
$content = preg_replace('/' . $contextualLinkStr . '/i ', '<a href="foo.html">''0</a>', $content);
我在我的preg_replace搜索模式中有一个尾随空格。这是因为我希望该函数忽略图像链接中出现的任何mytext实例。这可以工作,但会导致输出出现问题。输出还带有尾随空格,如下所示:
<a href="foo.html">mytext </a>
所以我的问题是-我如何从输出上的链接内删除尾随空间,然后在链接后添加尾随空间以说明已经删除的空间。我需要输出如下所示:
<a href="foo.html">mytext</a>_
其中"_"为尾随空格。有人能帮忙吗?
谢谢,Jason。
忽略图像链接,使用(*跳过)(*)
要忽略图像链接中的mytext
,在匹配时不要引入空格。相反,使用这个正则表达式直接忽略图像链接:
(?i)<img[^>]*>(*SKIP)(*F)|mytext
看演示。
左侧的替代|
匹配完整的<img links>
,然后故意失败,之后引擎跳到字符串中的下一个位置。右边匹配mytext
,我们知道它们是正确的,因为它们没有被左边的表达式匹配。
使用这个,您可以直接执行preg_replace:
$regex = "~(?i)<img[^>]*>(*SKIP)(*F)|" . $contextualLinkStr . "~";
$replaced = preg_replace($regex,'<a href="foo.html">$0</a>',$content);
有关此排除技术及其许多应用的详细信息,请参阅参考资料中的问题和文章。
参考- 如何匹配(或替换)模式,除了s1, s2, s3…
- 关于匹配模式的文章,除非…