[英]Match a line with a [ character, but don't match if it has a ] character
我认为这个正则表达式会匹配带有[
,但如果它有]
则不会:
^.*\[.*(?!\]).*$
相反,它用[
匹配每一行(以粗体显示):
这[应该匹配]。 这一行应该匹配
这条线不应该匹配。
这条线不应该匹配。 这条线 [不应该匹配。
如何修复该正则表达式,使其与具有]
行不匹配?
这[应该匹配]。 这一行应该匹配
这条线不应该匹配。
这条线不应该匹配。 这条线 [不应该匹配。
一种替代解决方案,它不是非常高效但有点短:
^(?!.*\[[^\]\n]*$)[^[\n]*\[.+$
解释:
(?!.*\\[[^\\]\\n]*$)
如果我们在任何地方得到[
没有结束]
则匹配失败[^[\\n]*\\[
匹配一行中的第一个[
此模式^.*\\[.*(?!\\]).*$
匹配[
并且紧随其后的.*
将匹配该行的其余部分。
然后在行尾,它会直接在右侧断言 not ]
,这是真的,因为它已经在行尾了。 然后.*
是可选的,它可以断言字符串的结尾。
所以它会匹配任何至少有一个[
如果您想匹配成对的开闭方括号[...]
并且不允许在其中包含任何方括号,或者在其外部使用单个方括号并匹配至少一对,则可以重复 1 次或多次匹配被包围的对方括号以外的可选字符。
^(?:[^\][\n]*\[[^\][\n]*\])+[^\][\n]*$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.