正则表达式在一个单词后匹配特定单词


Regex to match specific words after one word

所以我有下面的例子:

Lorem ipsum dolor SEARCHWORD sit amet, consectetur adipiscing elit. Fusce lacus nisl, feugiat laoreet dignissim sit amet, 关键字 gravida vel velit.Nunc SEARCHWORD elementum risus orci, ac tristique sem fringilla SEARCHWORD eget.莫比·马克西姆斯·莱克图斯·努拉, sed tempor nibh SEARCHWORD condimentum ut.Sed tincidunt cursus nibh

我想匹配KEYWORD的所有SEARCHWORD,并将它们替换为周围的标签,例如 <b>SEARCHWORD</b>.已经尝试和寻找一天了...正则表达式甚至可能吗?如果是,有人知道如何用正则表达式解决这个问题吗?

因此,我希望在字符串中第一次出现关键字后匹配所有搜索词。预期输出为:

Lorem ipsum dolor SEARCHWORD sit amet, consectetur adipiscing elit. Fusce lacus nisl, feugiat laoreet dignissim sit amet, 关键字 gravida vel velit.Nunc SEARCHWORD elementum risus orci, ac tristique sem fringilla SEARCHWORD eget.莫比·马克西姆斯·莱克图斯·努拉, sed tempor nibh SEARCHWORD condimentum ut.Sed tincidunt cursus nibh

我试过这个:

mb_ereg_replace('(?<=keyword)(.*?)(searchword)', ''1<b>'2</b>', $text, 'img');

要在字符串中第一次出现KEYWORD后匹配所有SEARCHWORD,您可以使用基于 'G 的正则表达式,例如

(?:KEYWORD|(?!^)'G).*?'KSEARCHWORD

查看正则表达式演示

(?:KEYWORD|(?!^)'G)匹配第一个KEYWORD,然后(?!^)'G要求下一个匹配项出现在上一个匹配项的位置。

.*?尽可能少地匹配 0+ 任何字符(因为正则表达式将与 DOTALL /s 选项一起使用),直到第一个SEARCHWORD,并且'K省略整个匹配值直到搜索词。

PHP演示:

$re = '~(?:KEYWORD|(?!^)'G).*?'KSEARCHWORD~su'; 
$str = "Lorem ipsum dolor SEARCHWORD sit amet, consectetur adipiscing elit. Fusce lacus nisl, feugiat laoreet dignissim sit amet, KEYWORD gravida vel velit. Nunc SEARCHWORD elementum risus orci, ac tristique sem fringilla SEARCHWORD eget. Morbi maximus lectus nulla, sed tempor nibh SEARCHWORD condimentum ut. Sed tincidunt cursus nibh"; 
$result = preg_replace($re, "<b>SEARCHWORD</b>", $str);
echo $result;

注意:如果您需要搜索SEARCHWORD s作为整个单词,请用'b s(如果搜索单词由字母数字/_字符组成),或者如果前导/尾随字符可能是非单词字符,则用(?<!'w)(?!'w)括起来。

您不必将"img"作为选项传递。请参阅此参考页面。

    var_dump(mb_ereg_replace('.*?(keyword).*?(searchword).*?$', ''1<b>'2</b>', 'AAAAAAAAkeywordBBBBBBBCCCCCCsearchwordDDDDDD'));
   //output : string 'keyword<b>searchword</b>' (length=24)