如何在正则表达式匹配中处理右括号?

  • 本文关键字:处理 正则表达式 regex
  • 更新时间 :
  • 英文 :


我正在尝试将一组文本中的括号项作为匹配组进行匹配。

文本本身可以有也可以没有括号。更复杂的是,文本可能有引号,也可能没有引号,或者根本就不存在,以下是预期输出的一些示例:

[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

地点:

  1. (?<=quote=)-quote=之后的所有内容,向后看
  2. (?=]abc)-]abc之前的所有内容,向前看
  3. ["'a-zA-Z[]]+-第1部分和第2部分之间允许使用哪些符号。
  4. (?<=quote])-quote]之后的一切,向后看
  5. (?=abc)-=abc之前的所有内容,向前看

最新更新