我有以下段落:
AUTOCAD is the best CAd program and it wins an AWARD for this.
我想使用只捕获AUTOCAD
,AWARD
并忽略CAd
的正则表达式,因为它包含小写。
我写了一个regex,如:
\b[A-Z0-9]+(?![a-z]+)
但C
也需要CAd
...但我不想要它!
如何提高我的正则表达式?
答案 0 :(得分:2)
重点是\b[A-Z0-9]+(?![a-z]+)
模式与C
匹配,然后在A
中测试CAd
,但由于A
正好在小写字母{之前{ {1}},d
前瞻使引擎回溯,退后一步再次测试(?![a-z]+)
以检查它是否后跟小写字母。因此,匹配为C
。
要在这种情况下使正则表达式失败,您需要使用占有量词C
(或其等效原子组++
)来禁止回溯到(?>[A-Z0-9]+)
- {{3 } { - \b[A-Z0-9]++(?![a-z]+)
为trailing \b
。