gpt4 book ai didi

regex - 结合否定字符和捕获组

转载 作者:行者123 更新时间:2023-12-05 04:31:05 24 4
gpt4 key购买 nike

目前如何运作

我能够捕获括号之间的值:

[[two b][three c]]

结果是

two b
three c

正则表达式

\[\[(.+?)\]\[(.+?)\]\]

当我使用这个字符串时

[[one a]]

没有捕获到任何东西,这正是我所期望的。很好。

问题

我组合字符串

[[one a]] and [[two b][three c]]

这是抓拍

one a]] and [[two b
three c

我的理解

据我所知,有一种可能的方法是否定 ]] 字符串。但我不知道该怎么做。我不确定这是否是正确的方法。

最佳答案

. 字符匹配除换行字符以外的任何字符,并且用惰性量词量化的事实并不限制它匹配基本上任何字符(从左到右搜索匹配项,因此,匹配的 [[ 是最左边的 [[ 和下一个 ][ 匹配,不管中间是否有 []

因此,一种方法是使用否定字符类 [[ 排除 ][[^\]\[] 之间的任何方括号:

\[\[([^\]\[]+)\]\[([^\]\[]+)\]\]

参见 regex demo 。在这里,替换 [^\]\[]+.+? 匹配除 [] 以外的一个或多个字符。

另一种方法是您提到的方法,即匹配在 [[ 之前不以 ]] 开始(也可能是 ][ )的任何字符:

\[\[((?:(?!\[\[).)*?)\]\[(.*?)\]\]
\[\[((?:(?!\[\[|\][\]\[]).)*)\]\[(.*?)\]\]

参见 this regex demo

(?:(?!\[\[).)*? 部分匹配任何字符 (.),零次或多次但尽可能少的出现 (*?),不开始 [[ 字符序列 ((?!\[\[))。

(?:(?!\[\[|\][\]\[]).)* 部分匹配任何字符 (.),零次或多次但尽可能多的出现 (*),不开始 [[[[][ 字符序列 ((?!\[\[|\][\]\[]))。

根据正则表达式的风格,您可以去掉此正则表达式中的一些反斜杠。

关于regex - 结合否定字符和捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71910550/

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