你能在Regex中重叠字符吗?

时间:2016-10-13 19:08:36

标签: regex

好吧有点奇怪。我知道你可以做一些不同的事情并得到你想要的东西,但我只是好奇这个功能是存在于某个地方还是以某种方式存在于一个正则表达式行中。

以下是一个示例表达式:

(?s)^\\sqrt[^A-Za-z].*?(\{\\rho\})
              ^          ^
              1          2

字符1 [^A-Za-z]正在检查分隔符。

字符2 \{可能是该分隔符。它也可能是一个空间,或许多其他随机字符。

但是,即使分隔符是空格,\{也必须存在,这意味着[ {]不理想。

是否有可能只确认字符1填充的地点不是字母,但不能算作字符?逻辑有点像;

if ("(?s)^\\sqrt[^A-Za-z]" matches) {
    Proceed to evaluate as "(?s)^\\sqrt.*?(\{\\rho\})"
}

1 个答案:

答案 0 :(得分:2)

您描述的逻辑适合负前瞻行为:它确保当前位置之后的文本与其模式不匹配。

使用

(?s)^\\sqrt(?![A-Za-z]).*?(\{\\rho\})

enter image description here

此处,^匹配字符串的开头,然后\\sqrt匹配\sqrt,之后,正则表达式引擎断言,(?![A-Za-z])后面没有ASCII字母消极的向前看。然后,.*?(\{\\rho\})继续匹配其余部分。

请参阅regex demo

此外,有关更多详细信息,请参阅描述negative lookahead行为的另一个SO线程。