仅当在固定长度模式中最多找到一次符号时才匹配正则表达式
Regex to match only if symbol is found at most once in fixed length pattern
我需要有关应匹配固定长度模式的正则表达式的帮助。
例如,以下正则表达式在匹配模式中最多允许 1 个 (
和 1 个 )
:
([^)(]*\(?[^)(]*\)?[^)(]*)
但是我不能/不想使用这个解决方案,因为 *
,因为我必须扫描的文本非常大,使用它似乎真的会影响性能。
因此我想施加匹配长度限制,例如例如使用 {10,100}
。
换句话说,正则表达式应该只匹配
- 字符串中有 0 到 1 组括号
- 比赛的总长度是固定的,例如不是无限的(否
*
!)
似乎是我的问题的解决方案,但我没有让它工作,而且我无法理解它。
我尝试使用已接受的答案并创建了这个:
^(?=[^()]{5,10}$)[^()]*(?:[()][^()]*){0,2}$
这似乎并没有真正按预期工作:https://regex101.com/r/XUiJZz/1
此外,请不要将此问题标记为与另一个问题重复,如果该问题中的答案使用 kleene star 运算符,它不会帮助我。
编辑:
我知道这是一个可能的解决方案,但我想知道是否有更好的方法:
([^)(]{0,100}\(?[^)(]{0,100}\)?[^)(]{0,100})
I thus want to impose a match length limit, e.g. using {10,100}
您可能希望 anchors 在正则表达式中添加 lookahead assertion:
^(?=.{10,100})[^)(]*(?:\(?[^)(]*\))?[^)(]*$
(?=.{10,100})
是断言字符串长度必须在 10
和 100
之间的先行条件。
我需要有关应匹配固定长度模式的正则表达式的帮助。
例如,以下正则表达式在匹配模式中最多允许 1 个 (
和 1 个 )
:
([^)(]*\(?[^)(]*\)?[^)(]*)
但是我不能/不想使用这个解决方案,因为 *
,因为我必须扫描的文本非常大,使用它似乎真的会影响性能。
因此我想施加匹配长度限制,例如例如使用 {10,100}
。
换句话说,正则表达式应该只匹配
- 字符串中有 0 到 1 组括号
- 比赛的总长度是固定的,例如不是无限的(否
*
!)
^(?=[^()]{5,10}$)[^()]*(?:[()][^()]*){0,2}$
这似乎并没有真正按预期工作:https://regex101.com/r/XUiJZz/1
此外,请不要将此问题标记为与另一个问题重复,如果该问题中的答案使用 kleene star 运算符,它不会帮助我。
编辑: 我知道这是一个可能的解决方案,但我想知道是否有更好的方法:
([^)(]{0,100}\(?[^)(]{0,100}\)?[^)(]{0,100})
I thus want to impose a match length limit, e.g. using {10,100}
您可能希望 anchors 在正则表达式中添加 lookahead assertion:
^(?=.{10,100})[^)(]*(?:\(?[^)(]*\))?[^)(]*$
(?=.{10,100})
是断言字符串长度必须在 10
和 100
之间的先行条件。