繁体   English   中英

匹配带有 [ 字符的行,但如果带有 ] 字符则不匹配

[英]Match a line with a [ character, but don't match if it has a ] character

我认为这个正则表达式会匹配带有[ ,但如果它有]则不会:

^.*\[.*(?!\]).*$

相反,它用[匹配每一行(以粗体显示):

这[应该匹配]。 这一行应该匹配

这条线不应该匹配。

这条线不应该匹配。 这条线 [不应该匹配。

如何修复该正则表达式,使其与具有]行不匹配?

这[应该匹配]。 这一行应该匹配

这条线不应该匹配。

这条线不应该匹配。 这条线 [不应该匹配。

https://regexr.com/67qk7

一种替代解决方案,它不是非常高效但有点短:

^(?!.*\[[^\]\n]*$)[^[\n]*\[.+$

正则表达式演示

解释:

  • (?!.*\\[[^\\]\\n]*$)如果我们在任何地方得到[没有结束]则匹配失败
  • [^[\\n]*\\[匹配一行中的第一个[

此模式^.*\\[.*(?!\\]).*$匹配[并且紧随其后的.*将匹配该行的其余部分。

然后在行尾,它会直接在右侧断言 not ] ,这是真的,因为它已经在行尾了。 然后.*是可选的,它可以断言字符串的结尾。

所以它会匹配任何至少有一个[

如果您想匹配成对的开闭方括号[...]并且不允许在其中包含任何方括号,或者在其外部使用单个方括号并匹配至少一对,则可以重复 1 次或多次匹配被包围的对方括号以外的可选字符。

^(?:[^\][\n]*\[[^\][\n]*\])+[^\][\n]*$

正则表达式演示

“这个正则表达式将匹配带有 [” (一个或多个)的行, “但如果它有一个 ]” (一个或多个):

^[^\][\n]*\[[^\]\n]*$

Regex101 的截图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM