我正在使用正则表达式
(?:^|;)\s*([^=]*[^=\s])\s*=\s*([^;]*[^;\s])
在以下字符串
上"""A"" = .B; ""C"" = .D; ""E"" = .F"
第二个捕获组([^;]*[^;\s])
与文本.B
,.D
和.F"
匹配,而第一个捕获组与文本"""A""
匹配,{{1 }和"C""
。
如何更新此正则表达式以仅匹配文本,即""E""
,.B
和.D
以及.F
,A
和{{ 1}}?
我尝试将引用添加到捕获组,例如C
,但这似乎没有任何影响。
答案 0 :(得分:3)
您可以在键值之前匹配零个或多个引号,然后限制[^=\s]
字符类以避免匹配"
,方法是将其添加到类中,然后再次匹配0+引号:
(?:^|;)\s*"*([^=]*[^=\s"])"*\s*=\s*([^;]*[^;\s"])
^^ ^ ^^ ^
请参阅regex demo。请注意,[^;]*
也会匹配双引号,因为它是贪婪模式。
<强>详情
(?:^|;)
- 字符串开头或;
\s*
- 0+ whitespaces "*
- 0+双引号([^=]*[^=\s"])
- 第1组:
[^=]*
- 除=
[^=\s"]
- 除=
以外的字符,空格和"
"*
- 0+双引号\s*=\s*
- 包含0 +空格的=
([^;]*[^;\s"])
- 第2组:
[^;]*
- 除;
[^;\s"]
- ;
以外的字符,空格和"
。