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

juud5qan  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(65)

此问题已在此处有答案

Restricting character length in a regular expression(1个答案)
3年前关闭。
我需要一个匹配固定长度模式的正则表达式的帮助。
例如,下面的正则表达式允许匹配的模式中最多有1 (和1 )
([^)(]*\(?[^)(]*\)?[^)(]*)
然而,我不能/不想使用这个解决方案,因为*,因为我必须扫描的文本是非常大的使用它似乎真的影响了性能。
因此,我想强加一个匹配长度限制,例如使用{10,100}
换句话说,正则表达式应该只匹配

  • 字符串中有0到1对括号
  • 匹配的总长度是固定的,例如不是无限的(No *!)

This似乎是我的问题的解决方案,但我没有得到它的工作,我有麻烦理解它。我试图使用公认的答案,并创建了这个:
^(?=[^()]{5,10}$)[^()]*(?:[()][^()]*){0,2}$
这似乎并不像预期的那样工作:https://regex101.com/r/XUiJZz/1
我无法使用克林星星操作员。

编辑

我知道这是一个可能的解决方案,但我想知道是否有更好的方法来做到这一点:
([^)(]{0,100}\(?[^)(]{0,100}\)?[^)(]{0,100})

v2g6jxz6

v2g6jxz61#

因此,我想施加一个匹配长度限制,例如使用{10,100}
您可能需要在正则表达式中anchors添加一个lookahead assertion

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

(?=.{10,100})是先行条件,用于Assert字符串长度必须介于10100之间。
RegEx Demo

相关问题