文本范围的PHP preg_匹配(_all)
尝试获取一个搜索字符串(我自己)的Textrange(前后n个单词) 这给了我匹配: •狗和“我自己”要走了 •我自己 但它应该是: •狗和“我自己”要走了 •艾琳和我都破产了 •约翰和我 请帮助我查找所有匹配项,文本范围为前2个单词和后2个单词。 无论搜索字符串(我自己)或“我自己”或“我自己”之前或之后是否有特殊字符或空格文本范围的PHP preg_匹配(_all),php,regex,preg-match,Php,Regex,Preg Match,尝试获取一个搜索字符串(我自己)的Textrange(前后n个单词) 这给了我匹配: •狗和“我自己”要走了 •我自己 但它应该是: •狗和“我自己”要走了 •艾琳和我都破产了 •约翰和我 请帮助我查找所有匹配项,文本范围为前2个单词和后2个单词。 无论搜索字符串(我自己)或“我自己”或“我自己”之前或之后是否有特殊字符或空格 谢谢。Sepp问题的产生是因为[“”(“.]和[“””)都是强制性的,并且在我自己之前和之后都需要一个字符。然后,(?:[^]+){0,2}和(?:[^])还必须在我自己
谢谢。Sepp问题的产生是因为
[“”(“.]
和[“””)
都是强制性的,并且在我自己
之前和之后都需要一个字符。然后,(?:[^]+){0,2}
和(?:[^])还必须在我自己
之前和之后有另一个空格{0,2}
你可以用
'/(?:\S+\s+){0,2}(?:[“'"(‘.])?myself(?:[“'")‘.]?)(?:\s+\S+){0,2}/u'
或者允许使用\p{p}
在本人
周围使用任何标点符号:
'/(?:\S+\s+){0,2}\p{P}?myself\p{P}?(?:\s+\S+){0,2}/u'
见
请注意,(?:[“”(“.])?
和(?:[“”)”。]?)
(或\p{p}?
)都是可选的,它们后面的?
量词使正则表达式引擎只匹配这些模式的1或0次。因此,如果存在或不存在,则会发生匹配
:
输出:
Array
(
[0] => dog and “myself“ are going
[1] => Irene and myself are broke.
[2] => John and myself!
)
你想在“我自己”之前加两个词,在“我自己”之后加两个词吗?是的。不管前后是否有特殊的字符或空格。它必须是正则表达式吗?是的,它必须是正则表达式,任何类型的正则表达式,或者只有preg_match?据我所知,这是正常的。非常感谢!sepp。
$text = 'Me, my dog and “myself“ are going on a vacation. Irene and myself are broke. Myself is here :P John and myself!';
if (preg_match_all('/(?:\S+\s+){0,2}\p{P}?myself\p{P}?(?:\s+\S+){0,2}/u', $text, $result)) {
print_r($result[0]);
}
Array
(
[0] => dog and “myself“ are going
[1] => Irene and myself are broke.
[2] => John and myself!
)