我过滤字符串并进行类似搜索
/(?=test).*/s
有效。但是如何从结果中排除搜索短语?我只想剩下这个词...
答案 0 :(得分:1)
您也可以通过匹配最后一次测试来使您的匹配没有前瞻性,然后忘记使用\K
匹配的内容。您还可以使用\h
匹配以下水平空白字符。
^.*\btest\b\h*\K.*$
如果您想在test
第一次出现后得到其余的信息,可以将点设为非贪婪.*?
另一种选择是在\btest\b
上拆分以获取所有零件并选择要保留的零件。
答案 1 :(得分:0)
我的猜测是,也许带有单词边界的表达式可能会起作用:
(?=.*\btest\b.*).*(\btest\b).*
对于非测试零件,我们还可以包括非捕获组:
(?=.*\btest\b.*)(?:.*)(\btest\b)(?:.*)
$re = '/(?=.*\btest\b.*)(?:.*)(\btest\b)(?:.*)/m';
$str = 'test some other words that comes after
some other words before test some other words that comes after';
$subst = '';
$result = preg_replace($re, $subst, $str);
echo $result;