我正在尝试将一组文本作为匹配组匹配到一个带括号的项中。
文本本身可能有也可能没有括号。更复杂的是,文本可能有也可能没有引号,或者根本不存在,下面是预期输出的一些示例:
[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[=]?["]?([\s\S]*?)["]?\]|\[\/quote\]
,但在上面的4-5个示例中失败了,因为它看到了第一个右括号
这将用于dart
EDIT:abc
中间的文本不应该是匹配的一部分,这意味着匹配#1应该是[quote...]
,匹配#2应该是[/quote]
,就像我当前的正则表达式模式一样
3条答案
按热度按时间zrfyljdw1#
您可以使用此正则表达式:
RegEx Demo
RegEx细分:
\[quote
:匹配[quote
(?:
:启动非捕获组=
:匹配一个=
(.+?)
:匹配任意字符的1+,并在组#1中捕获)?
:结束非捕获组。?
进行此可选匹配]
:比赛结束]
[^\]\[]*
:匹配0个或多个非[
和]
的任意字符\[/quote]
:匹配[/quote]
如果您希望每行有2个匹配的开始和结束标记,则可以用途:
RegEx Demo 2
des4xlb02#
试试这个。好像有用:
mftmpeh83#
第一个月
regex101.com
其中:
(?<=quote=)
-quote=
之后的所有内容,向后看(?=]abc)
-]abc
之前的所有内容,前瞻["'a-zA-Z\[\]]+
-在第1部分和第2部分之间允许哪些符号。(?<=quote])
-quote]
之后的所有内容,向后看(?=abc)
-=abc
之前的所有内容,前瞻