dea*_*mon 0 java regex intellij-idea
我想创建一个正则表达式,只允许类名不以Impl.我读到"没有结束"可以用负面的前瞻来测试(?!),但我找不到工作(Java)正则表达式.
我试过了
[A-Z][A-Za-z\d]*?(?!Impl)
Run Code Online (Sandbox Code Playgroud)
但它匹配SomeImpl,不应该是这样的.
什么正则表达式不匹配以Impl?结尾的类名?
负向前瞻不会起作用,因为 - 使用*?(懒惰的零或多)量词 - 它将检查S并Impl立即找不到,因此匹配成功.
如果你改变为贪婪的量词(*改为*?)它仍然会失败,因为你将在字符串的末尾 - 没有"前方"可以看.
相反,你要使用负的外观后面,检查以前的内容,即
[A-Z][A-Za-z\d]*(?<!Impl)
Run Code Online (Sandbox Code Playgroud)
($根据模式的使用位置,您可能想要或不想要它)
旁注:这里没有直接相关,但有用的是(在Java正则表达式中)lookbehind必须具有有限的宽度 - 您不能使用*或+量词,而必须使用有限的数字量词,例如{0,99}
但除非模式本身很重要(或者你在必须使用正则表达式的上下文中工作),一个更简单的选项是String.endsWith,如下所示:
! mystring.endsWith('Impl')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
250 次 |
| 最近记录: |