正则表达式匹配精确的单词
Regex match exact words
我希望我的正则表达式匹配 ?ver
和 ?v
,但 不 ?version
这是我目前拥有的:$parts = preg_split( "(\b\?ver\b|\b\?v\b)", $src );
我认为问题可能在于我如何逃避 ?
。
您的模式试图匹配以字符字符开头的 ?
,但由于有 none,您没有匹配。
使用以下模式:
'/\?v(?:er)?\b/'
图案详情:
\?
- 文字 ?
字符
v(?:er)?
- v
或 ver
\b
- 单词边界(即必须有一个非单词字符(不是数字、字母或 _
)或 v
或 [= 之后的字符串结尾16=]).
请注意,您不需要第一个(初始)单词边界,因为它已经存在于 ?
(非单词字符)和 v
(单词字符)之间。如果 ?
是可选的,您将需要一个单词边界。
尝试以下正则表达式模式;
(\?v(?:\b|(?:er(?!sion))))
这将允许 ?ver
和 ?v
,但如果 ?ver
后跟 sion
,将使用否定前瞻来防止匹配,如您的情况?version
.
基于以上答案,要匹配一个词而不是另一个词的一部分,您可以尝试
\b(WORD_HERE)\b
你的情况是 \b(\?ver)\b
这将允许 ver
并阻止 version
average
我希望我的正则表达式匹配 ?ver
和 ?v
,但 不 ?version
这是我目前拥有的:$parts = preg_split( "(\b\?ver\b|\b\?v\b)", $src );
我认为问题可能在于我如何逃避 ?
。
您的模式试图匹配以字符字符开头的 ?
,但由于有 none,您没有匹配。
使用以下模式:
'/\?v(?:er)?\b/'
图案详情:
\?
- 文字?
字符v(?:er)?
-v
或ver
\b
- 单词边界(即必须有一个非单词字符(不是数字、字母或_
)或v
或 [= 之后的字符串结尾16=]).
请注意,您不需要第一个(初始)单词边界,因为它已经存在于 ?
(非单词字符)和 v
(单词字符)之间。如果 ?
是可选的,您将需要一个单词边界。
尝试以下正则表达式模式;
(\?v(?:\b|(?:er(?!sion))))
这将允许 ?ver
和 ?v
,但如果 ?ver
后跟 sion
,将使用否定前瞻来防止匹配,如您的情况?version
.
基于以上答案,要匹配一个词而不是另一个词的一部分,您可以尝试
\b(WORD_HERE)\b
你的情况是 \b(\?ver)\b
这将允许 ver
并阻止 version
average