我有一个关于regex匹配的问题。我需要在一个字符串中找到一个特定的子串。一些例子。
1. IF[A != B; C[0]; D] ==> IF[A != B; C[0]; D]
2. IF[A != B; IF[E < F; ...; ...]; D] ==> IF[E < F; ...; ...]
3. IF[A != B; C; D] ==> IF[A != B; C; D]
所以,我有这样一个Regula表达式: IF\[([^\[\]]*)\]
. 它在情况2和3中工作得很好,但是在情况1中,出现了 C[0]
包含方括号。
我试着用这种方式修改我的regex。IF\[((?!IF))\]
最后 IF\[(.+(?!IF))\]
. 我加了一个前瞻,说 "保留不包含另一个IF的IF"。现在它在情况1和3中工作,但情况2返回整个字符串。
我如何创建一个正确的看头来解决这个问题?我需要找到字符串中最内部的IF,可以是整个字符串。
我已经尝试过这个答案中的解决方案。https:/stackoverflow.coma327479605731129
你要匹配 IF[...]
子串,其中方括号之间的字符串可能包含另一对方括号,除非在方括号前有一个 IF
,只有一个嵌套的支架级别。
为此,您可以使用
IF\[([^][]*(?:(?<!\bIF)\[[^][]*][^][]*)*)]
见 搜索引擎演示
详细内容
IF\[
- 一个 IF[
子串([^][]*(?:(?<!\bIF)\[[^][]*][^][]*)*)
- 第1组。[^][]*
- 0+字符以外的字符 [
和 ]
(?:(?<!\bIF)\[[^][]*][^][]*)*
- 0次或更多次出现(?<!\bIF)\[
- a [
虚词 IF
(\b
是字界)。)[^][]*
- 0+字符以外的其他字符 [
和 ]
]
- a ]
烧焦[^][]*
- 0+字符以外的其他字符 [
和 ]
]
- a ]
char.