正则表达式 - 忽略引号

时间:2018-04-17 12:10:04

标签: regex

我正在使用正则表达式

(?:^|;)\s*([^=]*[^=\s])\s*=\s*([^;]*[^;\s])

在以下字符串

"""A"" = .B; ""C"" = .D; ""E"" = .F"

第二个捕获组([^;]*[^;\s])与文本.B.D.F"匹配,而第一个捕获组与文本"""A""匹配,{{1 }和"C""

如何更新此正则表达式以仅匹配文本,即""E"".B.D以及.FA和{{ 1}}?

我尝试将引用添加到捕获组,例如C,但这似乎没有任何影响。

1 个答案:

答案 0 :(得分:3)

您可以在键值之前匹配零个或多个引号,然后限制[^=\s]字符类以避免匹配",方法是将其添加到类中,然后再次匹配0+引号:

(?:^|;)\s*"*([^=]*[^=\s"])"*\s*=\s*([^;]*[^;\s"])
          ^^           ^  ^^                  ^

请参阅regex demo。请注意,[^;]*也会匹配双引号,因为它是贪婪模式。

<强>详情

  • (?:^|;) - 字符串开头或;
  • \s* - 0+ whitespaces
  • "* - 0+双引号
  • ([^=]*[^=\s"]) - 第1组:
    • [^=]* - 除=
    • 以外的0个字符
    • [^=\s"] - 除=以外的字符,空格和"
  • "* - 0+双引号
  • \s*=\s* - 包含0 +空格的=
  • ([^;]*[^;\s"]) - 第2组:
    • [^;]* - 除;
    • 以外的0个字符
    • [^;\s"] - ;以外的字符,空格和"

enter image description here