我使用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>_
其中“_”是尾随空格。有人可以帮忙吗?
谢谢,
杰森。
答案 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);
有关此排除技术及其许多应用程序的完整详细信息,请参阅参考中的问题和文章。
参考