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

Regex match exact words

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

这是我目前拥有的:$parts = preg_split( "(\b\?ver\b|\b\?v\b)", $src );

我认为问题可能在于我如何逃避 ?

您的模式试图匹配以字符字符开头的 ?,但由于有 none,您没有匹配。

使用以下模式:

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

regex demo

图案详情:

  • \? - 文字 ? 字符
  • v(?:er)? - vver
  • \b - 单词边界(即必须有一个非单词字符(不是数字、字母或 _)或 v 或 [= 之后的字符串结尾16=]).

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

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

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

Demo

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

基于以上答案,要匹配一个词而不是另一个词的一部分,您可以尝试 \b(WORD_HERE)\b 你的情况是 \b(\?ver)\b 这将允许 ver 并阻止 version average