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



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

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

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

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

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

换句话说,正则表达式应该只匹配以下情况

  • 字符串内有 0 到 1 组括号
  • 比赛的总长度是固定的,例如不是无限的(没有*

这似乎是我问题的解决方案,但是我没有让它工作,我很难理解它。 我尝试使用公认的答案并创建了这个:

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

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

我无法使用 kleene 星形运算符。

<小时 />

编辑

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

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

因此我想

施加匹配长度限制,例如使用 {10,100}

您可能希望在正则表达式中添加一个前瞻断言

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

(?=.{10,100})是断言字符串长度必须在10100之间的前瞻条件。

正则表达式演示

最新更新