正则表达式仅在固定长度模式中最多找到一次符号时才匹配

时间:2019-06-18 10:04:20

标签: regex regex-lookarounds

我需要与固定长度模式匹配的正则表达式需要帮助。

例如,以下正则表达式在匹配的模式中最多允许1 (和1 )

([^)(]*\(?[^)(]*\)?[^)(]*)

但是由于*,我不能/不想使用此解决方案,因为使用它扫描的文本非常大,似乎确实影响了性能。

因此,我想施加一个匹配长度限制,例如例如使用{10,100}

换句话说,正则表达式仅在以下情况下匹配

  • 字符串中有0到1套括号
  • 比赛的总长度是固定的,例如不是无限的(否*!)

This似乎可以解决我的问题,但是我无法使其正常工作,并且难以理解。 我尝试使用接受的答案并创建了它:

^(?=[^()]{5,10}$)[^()]*(?:[()][^()]*){0,2}$

似乎并没有真正按预期工作:https://regex101.com/r/XUiJZz/1

也请不要将此问题标记为另一个问题的副本,如果该问题的答案使用了kleene star运算符,将无济于事。


编辑: 我知道这是一个可能的解决方案,但我想知道是否有更好的方法可以做到这一点:

([^)(]{0,100}\(?[^)(]{0,100}\)?[^)(]{0,100})

1 个答案:

答案 0 :(得分:2)

  

因此,我想施加一个匹配长度限制,例如使用{10,100}

您可能想锚定在正则表达式中添加超前断言

^(?=.{10,100})[^)(]*(?:\(?[^)(]*\))?[^)(]*$

(?=.{10,100})是一个先行条件,可以断言字符串的长度必须在10100之间。

RegEx Demo