Preg_replace删除输出上的尾随空格

时间:2014-06-21 13:14:31

标签: php regex

我使用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>_

其中“_”是尾随空格。有人可以帮忙吗?

谢谢,

杰森。

1 个答案:

答案 0 :(得分:1)

要忽略图片链接,请使用(*跳过)(* F)

要忽略图片链接中的mytext,请在匹配时不要引入空格。相反,使用此正则表达式直接忽略图像链接:

(?i)<img[^>]*>(*SKIP)(*F)|mytext

请参阅demo

交替|的左侧匹配完成<img links>然后故意失败,之后引擎跳到字符串中的下一个位置。右侧与mytext匹配,我们知道它们是正确的,因为它们与左侧的表达式不匹配。

使用此功能,您可以直接执行preg_replace:

$regex = "~(?i)<img[^>]*>(*SKIP)(*F)|" . $contextualLinkStr . "~";
$replaced = preg_replace($regex,'<a href="foo.html">$0</a>',$content);

有关此排除技术及其许多应用程序的完整详细信息,请参阅参考中的问题和文章。

参考