gpt4 book ai didi

regex - 负向后看和方括号

转载 作者:行者123 更新时间:2023-12-04 02:52:29 27 4
gpt4 key购买 nike

我想创建一个匹配不匹配的右方括号的正则表达式。示例:

]ichael ==> match ]

[my name is Michael] ==> no match

我的文本中没有嵌套的方括号对。

我尝试为此使用负向后视,更具体地说,我使用这个正则表达式:(?<!\[(.)+)\]但它似乎并不能解决问题。

有什么建议吗?

最佳答案

除非您使用的是 .NET,否则回顾必须具有固定长度。由于您只想检测是否有任何不匹配的右括号,因此您实际上并不需要向后看:

^[^\[\]]*(?:\[[^\[\]]*\][^\[\]]*)*\]

如果匹配,则右括号不匹配。

如果您意识到 [^\[\]] 是一个否定的字符类,它匹配除方括号之外的任何内容,并且您以自由间距模式进行布局,那么它会更容易理解:

^              # start from the beginning of the string
[^\[\]]* # match non-bracket characters
(?: # this group matches matched brackets and what follows them
\[ # match [
[^\[\]]* # match non-bracket characters
\] # match ]
[^\[\]]* # match non-bracket characters
)* # repeat 0 or more times
\] # match ]

所以这试图在匹配 0 或更多匹配的括号对后找到 ]

请注意,^] 之间的部分在功能上等同于 Tim Pietzker 的解决方案(我认为这在概念上更容易理解)。我所做的是一种名为 "unrolling the loop" 的优化技术.如果您的 flavor 提供所有格量词,您可以将所有 * 变成 *+ 以进一步提高效率。


关于你的尝试

即使您使用的是 .NET,您的模式的问题在于 . 允许您越过其他括号。因此,您在

[abc]def]

因为第一个和第二个 ] 前面都有一个 [。如果您使用的是 .NET,最简单的解决方案是

(?<!\[[^\[\]]*)\]

这里我们在重复中使用非括号字符,这样我们就不会越过左边遇到的第一个 []

关于regex - 负向后看和方括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17405235/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com