替换字符串中的文本排除锚文本

时间:2018-11-15 05:49:19

标签: php regex string replace

我想搜索字符串中的单词,并希望替换该字符串中的第一个匹配项。我也想排除仅在标签之间的文本。这意味着具有超链接的文本不应该被替换。

这应该在新行中检查新行。

示例:

  

这里是我的字符串。我想替换我的字符串。在   这个字符串只有1我将被替换,这是第一个,没有   锚链接。

用“ This”替换我

输出。

  

这里是我的字符串。我想替换此字符串。   在此字符串中,只有1我将被替换,这是第一个,而不是   有锚链接。

谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式匹配仅出现在<a> </a>标记中的“ my”的首次出现。

^.*?\Kmy(?![^>]*\/\s*a\s*>)

并根据需要在帖子中将其替换为“ this”。

说明:

  • ^->输入开始
  • .*?->以非贪婪方式匹配任何字符(以捕获我的第一次出现的情况)
  • \K->重置所有匹配项,以便仅匹配“ my”,而需要用“ this”替换
  • (?![^>]*\/\s*a\s*>)->否定前瞻性,以确保<a> </a>标签中不包含“我的”文本。

Demo

这是相同的示例PHP代码,

$str = 'Here is < a > my < / a > String. I Would like to replace my string. In this string only 1 my will be replace which is first and doesn\'t has anchor link.';
$res = preg_replace('/^.*?\Kmy(?![^>]*\/\s*a\s*>)/','this',$str);
echo $res;

这将提供您期望的以下输出,

Here is < a > my < / a > String. I Would like to replace this string. In this string only 1 my will be replace which is first and doesn't has anchor link.