匹配特定单词和其后的成对括号之间的字符串,具有单个嵌套级别支持,但有异常
Match string between a specific word and paired brackets after it with a single nested level support with an exception
我遇到了正则表达式匹配问题。我需要在字符串中找到特定的子字符串。一些例子:
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]
所以,我有这个正则表达式:IF\[([^\[\]]*)\]
。它在情况 2 和情况 3 中工作正常,但在情况 1 中有 C[0]
包含方括号。
我尝试以这种方式更改我的正则表达式:IF\[((?!IF))\]
,最后 IF\[(.+(?!IF))\]
。我加了个提前说一下"keep the IF that does not contains another IF"。现在它适用于情况 1 和 3 但情况 2 returns 整个字符串。
如何创建正确的外观头来解决这个问题?我需要在字符串中找到最内部的IF,可以是整个字符串。
我已经在这个答案中尝试过解决方案:
您想匹配 IF[...]
个子字符串,其中方括号之间的字符串可能包含另一对方括号,除非前面有 IF
,只有一个嵌套的括号级别。
为此,您可以使用
IF\[([^][]*(?:(?<!\bIF)\[[^][]*][^][]*)*)]
详情
IF\[
- IF[
子串
([^][]*(?:(?<!\bIF)\[[^][]*][^][]*)*)
- 第 1 组:
[^][]*
- [
和 ]
以外的 0+ 个字符
(?:(?<!\bIF)\[[^][]*][^][]*)*
- 出现 0 次或多次
(?<!\bIF)\[
- [
字符前面没有紧跟整个单词 IF
(\b
是单词边界)
[^][]*
- [
和 ]
以外的 0+ 个字符
]
- 一个 ]
字符
[^][]*
- [
和 ]
以外的 0+ 个字符
]
- 一个 ]
字符。
我遇到了正则表达式匹配问题。我需要在字符串中找到特定的子字符串。一些例子:
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]
所以,我有这个正则表达式:IF\[([^\[\]]*)\]
。它在情况 2 和情况 3 中工作正常,但在情况 1 中有 C[0]
包含方括号。
我尝试以这种方式更改我的正则表达式:IF\[((?!IF))\]
,最后 IF\[(.+(?!IF))\]
。我加了个提前说一下"keep the IF that does not contains another IF"。现在它适用于情况 1 和 3 但情况 2 returns 整个字符串。
如何创建正确的外观头来解决这个问题?我需要在字符串中找到最内部的IF,可以是整个字符串。
我已经在这个答案中尝试过解决方案:
您想匹配 IF[...]
个子字符串,其中方括号之间的字符串可能包含另一对方括号,除非前面有 IF
,只有一个嵌套的括号级别。
为此,您可以使用
IF\[([^][]*(?:(?<!\bIF)\[[^][]*][^][]*)*)]
详情
IF\[
-IF[
子串([^][]*(?:(?<!\bIF)\[[^][]*][^][]*)*)
- 第 1 组:[^][]*
-[
和]
以外的 0+ 个字符
(?:(?<!\bIF)\[[^][]*][^][]*)*
- 出现 0 次或多次(?<!\bIF)\[
-[
字符前面没有紧跟整个单词IF
(\b
是单词边界)[^][]*
-[
和]
以外的 0+ 个字符
]
- 一个]
字符[^][]*
-[
和]
以外的 0+ 个字符
]
- 一个]
字符。