我想在java中使用负向先行,但我不能只将它应用于文本的某一部分。它从光标一直使用到末尾。有没有可能以某种方式做到这一点?
例如:我有一个包含不定'ab's的字符串: ababJJJababab
我只想把没有‘ab’的中心部分分组(即JJJ)。所以这是我的正则表达式:
^(?:ab)*((?!.*ab.*).*)(?:ab)*$问题是,负向先行超出了它的容器组,并试图避免‘ab’直到文本的末尾(这将导致根本找不到任何匹配)。请注意,我的实际问题要复杂得多,我不是在寻找绕过这个特定示例的方法。有没有办法在regex中指定某种边界来定义先行的范围,避免它应用于文本的其余部分?
先谢谢你...
发布于 2013-02-23 22:27:21
在这种特殊情况下,您根本不需要负向先行。您只需要使中间量词不贪婪,这样它就不会消耗尾随的“ab”:
^(?:ab)*(.*?)(?:ab)*$发布于 2013-02-23 23:06:15
在这种特定情况下,最小匹配应该是可行的。但是,在一般情况下,您需要如下所示:
(?sx)
(?:abc) ( (?: (?!abc) .)* ) (?:abc)我也不信任你在第一部分和最后部分的所有明星。你知道你的模式与空字符串匹配,不是吗?
https://stackoverflow.com/questions/15041369
复制相似问题