是否可以在regex java中定义前瞻范围?

时间:2013-02-23 14:05:49

标签: java regex negative-lookahead

我想在java中使用负面预测,但我不能仅将其应用于文本的某些部分。从光标到结束使用它。有可能以某种方式做到吗?

一个例子: 我有一个无限期'ab'的字符串:ababJJJababab

我希望只有没有'ab'的中心部分被分组(即JJJ)。所以这是我的正则表达式:

^(?:ab)*((?!.*ab.*).*)(?:ab)*$

问题在于负向前瞻超出了它的容器组,并试图避免'ab'直到文本结束(这将导致根本找不到任何匹配)。 请注意,我的实际问题要复杂得多,我并不是想找到解决这个特定示例的方法。是否有任何方法可以为正则表达式中的前瞻定义范围分配某种边界,从而避免将其应用于文本的其余部分?

提前致谢...

2 个答案:

答案 0 :(得分:2)

在这种特定情况下,最小匹配应该起作用。但是,在一般情况下,你需要这样的东西:

(?sx)
(?:abc) ( (?: (?!abc) .)* ) (?:abc)

我也不相信你的第一部分和最后部分的所有明星。你意识到你的模式匹配空字符串,不是吗?

答案 1 :(得分:1)

在这种特殊情况下,您根本不需要负向前瞻。你只需要使中间量词非贪婪,这样它就不会消耗尾随的“ab”:

^(?:ab)*(.*?)(?:ab)*$