Preg替换删除输出的尾随空格


Preg Replace Remove Trailing Space on Output

我使用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…
  • 关于匹配模式的文章,除非…