我有以下正则表达式:
[a-zA-Z0-9. ]*(?!cs)
和字符串
Hotfix H5.12.1.00.cs02_ADV_LCR
我想只匹配直到
Hotfix H5.12.1.00
但正则表达式匹配直到" cs02"
负面的前瞻不应该完成这项工作吗?
答案 0 :(得分:0)
你需要使用积极的前瞻而不是消极的前瞻。
[a-zA-Z0-9. ]*(?=\.cs)
或
[a-zA-Z0-9. ]+(?=\.cs)
请注意,您的正则表达式[a-zA-Z0-9. ]*(?!cs)
是贪婪的,并匹配所有字符,直到它到达一个后面跟cs
的边界。请参阅here。
首先,模式[a-zA-Z0-9. ]+
贪婪地匹配Hotfix H5.12.1.00.cs02
,因为此模式贪婪地匹配字母,点和空格。一旦看到下划线字符,就会停止匹配满足两个条件的位置,
_
无法与[a-zA-Z0-9. ]+
_
不是cs
它也适用于另外两场比赛。
答案 1 :(得分:0)
您可以考虑使用tempered greedy token:
(?:(?!\.cs)[a-zA-Z0-9. ])*
请参阅regex demo。
无论字符串中是否存在.cs
,这都会有效,因为调和的贪婪令牌与[a-zA-Z0-9. ]
不是.cs
的{0}}字符类中的任何0+字符匹配。 / p>