我希望我的正则表达式匹配?ver
和?v
,但不 ?version
这是我到目前为止所做的:$parts = preg_split( "(\b\?ver\b|\b\?v\b)", $src );
我认为麻烦可能是我如何逃避?
。
答案 0 :(得分:6)
您的模式尝试匹配前面带有单词char的?
,并且由于没有,您没有匹配。
使用以下模式:
'/\?v(?:er)?\b/'
请参阅regex demo
模式详情:
\?
- 文字?
字符v(?:er)?
- v
或ver
\b
- 一个单词边界(即_
或{{1}之后必须有非单词字符(不是数字,字母或v
)或字符串结尾})。请注意,您不需要第一个(初始)单词边界,因为它已经存在于ver
(非单词字符)和?
(单词字符)之间。如果v
是可选的,那么你需要一个单词边界。
答案 1 :(得分:5)
尝试以下正则表达式模式;
(\?v(?:\b|(?:er(?!sion))))
这将允许?ver
和?v
,但如果?ver
后跟sion
,则会使用否定前瞻来防止匹配,如您的情况?version
1}}。
答案 2 :(得分:0)
在上述答案的基础上,匹配单词而不成为另一个单词的一部分,您可以尝试
\b(WORD_HERE)\b
,在您的情况下为\b(\?ver)\b
这将允许ver
并阻止version
average