我正在尝试将一组文本中的括号项作为匹配组进行匹配。
文本本身可以有也可以没有括号。更复杂的是,文本可能有引号,也可能没有引号,或者根本就不存在,以下是预期输出的一些示例:
[quote=John]abc[/quote] // John
[quote="John"]abc[/quote] // "John"
[quote='John']abc[/quote] // 'John'
[quote='Joh]n']abc[/quote] // 'Joh]n'
[quote='Joh[]n']abc[/quote] // 'Joh[]n'
[quote]abc[/quote] // match
到目前为止,我想到的模式是[quote[=]?["]?([sS]*?)["]?]|[/quote]
,但它在上面的4-5个例子中失败了,因为它看到了第一个右括号
这将用于dart
编辑:在中间的文本abc
不应该是匹配的一部分,这意味着匹配#1应该是[quote...]
和匹配#2应该是[/quote]
,因为我目前的正则表达式模式
你可以使用这个正则表达式:
[quote(?:=(.+?))?][^][]*[/quote]
RegEx演示
正则表达式分解:
[quote
: Match[quote
(?:
:启动非抓包组=
:匹配=
(.+?)
:匹配1+任意字符并捕获组#1
)?
:结束非捕获组。?
使这个可选匹配]
:关闭]
[^][]*
:匹配0个或多个非[
和]
的字符
[/quote]
:匹配[/quote]
如果你想每行有两个匹配的开始和结束标签,那么你可以使用:
[quote(?:=(.+?))?](?=[^][]*[)|[/quote]
RegEx Demo 2
试试这个。似乎在工作:
[quote(?:=|=s*(['"]))?([^]]*)1?]([^[]*)[/quote]
(?<=quote=)["'a-zA-Z[]]+(?=]abc)|(?<=quote])(?=abc)
regex101.com
地点:
(?<=quote=)
-quote=
之后的所有内容,向后看(?=]abc)
-]abc
之前的所有内容,向前看["'a-zA-Z[]]+
-第1部分和第2部分之间允许使用哪些符号。(?<=quote])
-quote]
之后的一切,向后看(?=abc)
-=abc
之前的所有内容,向前看