正则表达式匹配确切的单词

时间:2017-07-18 11:11:48

标签: php regex preg-split

我希望我的正则表达式匹配?ver?v,但 ?version

这是我到目前为止所做的:$parts = preg_split( "(\b\?ver\b|\b\?v\b)", $src );

我认为麻烦可能是我如何逃避?

3 个答案:

答案 0 :(得分:6)

您的模式尝试匹配前面带有单词char的?,并且由于没有,您没有匹配。

使用以下模式:

'/\?v(?:er)?\b/'

请参阅regex demo

模式详情

  • \? - 文字?字符
  • v(?:er)? - vver
  • \b - 一个单词边界(即_或{{1}之后必须有非单词字符(不是数字,字母或v)或字符串结尾})。

请注意,您不需要第一个(初始)单词边界,因为它已经存在于ver(非单词字符)和?(单词字符)之间。如果v是可选的,那么你需要一个单词边界。

答案 1 :(得分:5)

尝试以下正则表达式模式;

(\?v(?:\b|(?:er(?!sion))))

Demo

这将允许?ver?v,但如果?ver后跟sion,则会使用否定前瞻来防止匹配,如您的情况?version 1}}。

答案 2 :(得分:0)

在上述答案的基础上,匹配单词而不成为另一个单词的一部分,您可以尝试 \b(WORD_HERE)\b,在您的情况下为\b(\?ver)\b 这将允许ver并阻止version average