为什么终点线锚在前瞻后不起作用?

时间:2018-03-06 11:36:57

标签: c# .net regex

我正在使用C#而且我遇到了Regex的问题。

我有下一个文字:123_456。我只需要捕获 123 ,同时确保 _456 存在并且所有内容都在一个字符串/行上。

所以,我尝试了下一个模式:^123(?=_456)$并发现它不适用于终点线锚点,没有它就一切正常:^123(?=_456)

1 个答案:

答案 0 :(得分:2)

你必须把锚放在前瞻中:

^123(?=_456$)
           ^ 

要确保没有_以及字符串末尾的任何数字,请使用

^123(?=_\d+$)

在字符串开头使用^123(?=_456)$ 123匹配时,(?=_456) lookahead会确保(或要求)紧靠右侧的_456当前位置,然后想要匹配字符串的结尾。但是,这两个条件是互斥的:您可以在_456之后立即使用字符串结尾和123