正则表达式匹配任何字符或不匹配字符,给定的例外情况除外
Regex matching any or no character except for given exceptions
我正在尝试匹配前面没有字符的字符串,但可能什么也没有。
示例:我想在括号中匹配 "test" 的所有情况,除非它们前面有“[”或“|”。
示例字符串:
(1) {this is a test} // match
(2) {this [is] also a test } // match
(3) {test} // match
(4) {this is the third |test} // no match
(5) {this is the third [test} // no match
我的第一次尝试是这样的:
\{.*[^\||\[]test.*\}
当然,这不匹配(3),因为括号和"test"之间没有字符。
然后我尝试了一个消极的环顾:
\{.*(?!\||\[)test.*\}
但这匹配所有示例字符串。显然,javascript 或我正在使用的环境不支持后视。
有办法吗?我错过了什么?
谢谢。
您可以使用以下正则表达式:
\{[^\{\}]*(?<![\[|])test[^\{\}]*\}
步骤:
- \{, 从左大括号开始。
- [^\{\}]*,后跟零个或多个非大括号。
- (?| 或
[
. 之后的测试
- [^\{\}]*,后跟零个或多个非大括号。
- \},后跟一个右大括号。
如果您的语言不接受回溯,那么您可以考虑以下基于正向回溯的正则表达式。
^(?=\{)[^}]*?[^\[|]test[^}]*}
我正在尝试匹配前面没有字符的字符串,但可能什么也没有。
示例:我想在括号中匹配 "test" 的所有情况,除非它们前面有“[”或“|”。
示例字符串:
(1) {this is a test} // match
(2) {this [is] also a test } // match
(3) {test} // match
(4) {this is the third |test} // no match
(5) {this is the third [test} // no match
我的第一次尝试是这样的:
\{.*[^\||\[]test.*\}
当然,这不匹配(3),因为括号和"test"之间没有字符。
然后我尝试了一个消极的环顾:
\{.*(?!\||\[)test.*\}
但这匹配所有示例字符串。显然,javascript 或我正在使用的环境不支持后视。
有办法吗?我错过了什么?
谢谢。
您可以使用以下正则表达式:
\{[^\{\}]*(?<![\[|])test[^\{\}]*\}
步骤:
- \{, 从左大括号开始。
- [^\{\}]*,后跟零个或多个非大括号。
- (?| 或
[
. 之后的测试
- [^\{\}]*,后跟零个或多个非大括号。
- \},后跟一个右大括号。
如果您的语言不接受回溯,那么您可以考虑以下基于正向回溯的正则表达式。
^(?=\{)[^}]*?[^\[|]test[^}]*}