正则表达式是否可能为Lookahead或Lookbehind?

时间:2013-10-30 16:35:52

标签: regex

我正在努力创造某种可以向前看或向后看的RegEx。

理想的选择是匹配 b ba 中的 a ,由 b 的存在触发强>

显然我可以重复 a ,例如:

((?<=b)a)|a(?=b) 

但是如果不重复匹配集可以做到吗?

2 个答案:

答案 0 :(得分:2)

  

免责声明:此答案使用 PCRE 语法/风格。语法可能与其他版本不同,其中一些根本不支持它。

首先,我会警告你,你应该选择以下内容:(?<=b)a|a(?=b)。这很容易理解。

现在,如果你想看到另一个解决方案,我想出了以下a(?(?=b)|(?<=b.))。那是什么意思呢?

a               # match a
(?              # if
    (?=b)       # there is a "b" ahead
    |           # else
    (?<=b.)     # there is a "b" 2 steps behind
)               # end if

Online demo

答案 1 :(得分:1)

匹配集对我来说似乎是最简单,最清晰的方法。也就是说,您可以始终构建一个仅前瞻的正则表达式,然后将其应用于目标字符串及其反向。