Regex 单对(嵌套)方括号的正则表达式,但不包括中间叶括号?
在SO和其他地方有很多匹配括号或方括号对的解决方案,但我找不到或想出任何排除中间叶项目的方法。这一挑战的解决方案是什么:Regex 单对(嵌套)方括号的正则表达式,但不包括中间叶括号?,regex,parsing,state-machine,regular-language,Regex,Parsing,State Machine,Regular Language,在SO和其他地方有很多匹配括号或方括号对的解决方案,但我找不到或想出任何排除中间叶项目的方法。这一挑战的解决方案是什么: 为包含任意数量X的字符串编写正则表达式 以及和{}的单个对,它们可以嵌套,但不能嵌套 中间叶的。例如,允许使用以下字符串: XXXX X{X}XX{X}XX 但这些是不允许的: XXXXX XXXX}XX 这可以用正则表达式(有限自动机)来完成吗?它不需要一个下推自动机吗 除了不交错外,请注意对单对的要求,这意味着嵌套可能只有一层深,具有不同的括号类型,如图所示 没有使用哪
为包含任意数量X的字符串编写正则表达式
以及<>和{}的单个对,它们可以嵌套,但不能嵌套
中间叶的。例如,允许使用以下字符串:
XXXX
X{X}XX{X}XX
但这些是不允许的:
XXXXX
XXXX}XX
这可以用正则表达式(有限自动机)来完成吗?它不需要一个下推自动机吗
除了不交错外,请注意对单对的要求,这意味着嵌套可能只有一层深,具有不同的括号类型,如图所示
没有使用哪个正则表达式引擎/语言的首选项。使用
^[^{}]*(?:(?:{[^{}]*})+[^{}]*)*$
看
解释
--------------------------------------------------------------------------------
^字符串的开头
--------------------------------------------------------------------------------
[^{}]*除以下字符外的任何字符:''{','}'
(0次或以上(与最高金额匹配)
(可能的)
--------------------------------------------------------------------------------
(?:组,但不捕获(0次或更多次)
(匹配尽可能多的金额):
--------------------------------------------------------------------------------
(?:组,但不捕获(1个或多个)
次数(与最大金额匹配)
(可能的):
--------------------------------------------------------------------------------
< ''
--------------------------------------------------------------------------------
|或
--------------------------------------------------------------------------------
{ '{'
--------------------------------------------------------------------------------
[^{}]*除“{”、“0”或“}”以外的任何字符
更多次(与最多金额匹配)
(可能的)
--------------------------------------------------------------------------------
} '}'
--------------------------------------------------------------------------------
)+分组结束
--------------------------------------------------------------------------------
[^{}]*除以下字符外的任何字符:''{','}'
(0次或更多次(匹配最大
(可能的金额)
--------------------------------------------------------------------------------
)*分组结束
--------------------------------------------------------------------------------
$在可选的前\n和
一串
使用
^[^{}]*(?:(?:{[^{}]*})+[^{}]*)*$
看
解释
--------------------------------------------------------------------------------
^字符串的开头
--------------------------------------------------------------------------------
[^{}]*除以下字符外的任何字符:''{','}'
(0次或以上(与最高金额匹配)
(可能的)
--------------------------------------------------------------------------------
(?:组,但不捕获(0次或更多次)
(匹配尽可能多的金额):
--------------------------------------------------------------------------------
(?:组,但不捕获(1个或多个)
次数(与最大金额匹配)
(可能的):
--------------------------------------------------------------------------------
< ''
--------------------------------------------------------------------------------
|或
--------------------------------------------------------------------------------
{ '{'
--------------------------------------------------------------------------------
[^{}]*除“{”、“0”或“}”以外的任何字符
更多次(与最多金额匹配)
(可能的)
--------------------------------------------------------------------------------
} '}'
--------------------------------------------------------------------------------
)+分组结束
--------------------------------------------------------------------------------
[^{}]*除以下字符外的任何字符:''{','}'
(0次或更多次(匹配最大
(可能的金额)
--------------------------------------------------------------------------------
)*分组结束
--------------------------------------------------------------------------------
$在可选的前\n和
一串
让X
成为[^{}]
的简写。那么所需的正则表达式是:
(X |{(X |)*}*
或者,全部写出来
([^{}]|{([^{}]|)*})*
参见让X
成为[^{}]
的简写。那么所需的正则表达式是:
(X |{(X|