匹配前面有特定模式的模式,而不使用lookbehind

时间:2015-06-22 14:22:12

标签: regex eclipse lookahead

只有在前面有B的情况下才能匹配A吗? A可以位于B后面的任意位置,其间有任意数量的字符。例子:

A_B (Matches `B`)

C_B (No match)

我试过了:

(?=A)[^B]*B

但它也匹配B之前的所有字符。我的正则表达式引擎不支持可变长度的后视。我有什么方法可以做到这一点吗?

编辑:我目前正在Eclipse中使用内置的正则表达式搜索,但是,我正在使用regex101.com来测试。

1 个答案:

答案 0 :(得分:2)

当你的琴弦的长度上限有一个相对较小的固定上限时,可以使用缺少可变长度后视镜的解决方法。例如,如果您知道字符串长度最多为100个字符,则可以使用{0,100}代替*{1,100}代替{look}隐藏表达式中的+

(?<=A[^B]{0,100})B

当字符串的长度没有明显的上限时,您可以完全放弃lookbehind,在其位置使用非捕获组,将捕获组放在B上,并使用该组的内容作为正则表达式的结果。