Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式匹配一个单词后的特定单词_Php_Regex - Fatal编程技术网

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

Php 正则表达式匹配一个单词后的特定单词,php,regex,Php,Regex,因此,我有以下示例: Lorem ipsum dolor搜索词sit amet,奉献精英。 他是一位贵族,他是一位贵族, 关键词孕妇水平。Nunc搜索词elementum risus orci,ac tristique sem fringilla搜索词eget。Morbi maximus lectus nulla, sed临时nibh搜索词调味品ut。小鱼 我想在关键字之后匹配所有搜索词,并用周围的标签替换它们,如搜索词。已经试着寻找了一天了。。。正则表达式也可以吗?如果是,有人知道如何用正则表

因此,我有以下示例:

Lorem ipsum dolor搜索词sit amet,奉献精英。 他是一位贵族,他是一位贵族, 关键词孕妇水平。Nunc搜索词elementum risus orci,ac tristique sem fringilla搜索词eget。Morbi maximus lectus nulla, sed临时nibh搜索词调味品ut。小鱼

我想在
关键字
之后匹配所有搜索词,并用周围的标签替换它们,如
搜索词
。已经试着寻找了一天了。。。正则表达式也可以吗?如果是,有人知道如何用正则表达式解决这个问题吗

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

Lorem ipsum dolor搜索词sit amet,奉献精英。 他是一位贵族,他是一位贵族, 关键词孕妇水平。Nunc搜索词elementum risus orci,ac tristique sem fringilla搜索词eget。Morbi maximus lectus nulla, sed临时nibh搜索词调味品ut。小鱼

我试过这个:

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

mb_ereg_replace(”(?要匹配字符串中第一次出现
关键字
后的所有
SEARCHWORD
s,可以使用基于
\G
的正则表达式,如

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

(?:关键字|(?!^)\G)
匹配第一个
关键字
,然后
(?!^)\G
要求下一个匹配出现在上一个匹配的位置

*?
匹配0+任何字符(因为正则表达式将与DOTALL
/s
选项一起使用),直到第一个
搜索词
,并且
\K
忽略整个匹配值直到搜索词

:

$re='~(?:关键字|(?!^)\G.*?\k搜索词~su';
$str=“Lorem ipsum dolor SEARCHWORD sit amet,concetetur adipis elit.Fusce lacus nisl,feugiat laoreet dignessim sit amet,关键字gravida vel velit.Nunc SEARCHWORD element um risus orci,ac tristique sem frontilla SEARCHWORD eget.Morbi maximus lectus nulla,sed tempor nib nib sed sed nib sed sed sed sed grammer调味品,sed tincidut cursus curus nib”;
$result=preg_replace($re,“SEARCHWORD”,$str);
回声$结果;

注意:如果需要将
SEARCHWORD
s作为一个完整的单词进行搜索,请使用
\b
s(如果搜索词由字母数字字符组成)或
(?和
(?!\w)将其括起来
如果前导/尾随字符可能是非单词字符。

您不必将“img”作为选项传递。请参阅

var_dump(mb_ereg_replace('.*(关键字)。*?(搜索词)。*?$,'\1\2','aaaaaaaa关键字bbbbbccccccsearchwordddddddd');
//输出:字符串“关键字搜索词”(长度=24)

你在用什么编程?给我们看看你的代码。@WiktorStribiżew
ereg_replace
不受欢迎,但不是
mb_ereg_replace
。不幸的是
preg_replace('/(?是的,只是仔细检查一下。试试。我仍然不知道您期望的输出是什么,所以我不明白什么不起作用,您应该在问题正文中解释,而不是在注释中解释。@WiktorStribiżew,我正在尝试一切,这就是为什么如果正则表达式起作用,编程语言是不相关的。@mansur:regex101有bug和3选项s仅代表3种正则表达式风格,还有更多的风格。了解正则表达式风格非常重要。Python
re
不支持
\G
,Java也不支持。
$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;
    var_dump(mb_ereg_replace('.*?(keyword).*?(searchword).*?$', '\1<b>\2</b>', 'AAAAAAAAkeywordBBBBBBBCCCCCCsearchwordDDDDDD'));
   //output : string 'keyword<b>searchword</b>' (length=24)