首页 > 解决方案 > 匹配 () 和不在引号内的字符串

问题描述

我目前的尝试(?<=[,(][^"]).*(?=[,)][^"])

("WideCharToMultiByte", "uint", 0, "uint", 0x400, "uint", Address, "int", Length, "str", String, "int", char_count, "uint", 0, "uint", 0)  

https://regex101.com/r/Vd3w7C/3/

如何匹配( )引号内较少的内容中的所有内容?

仅匹配:0 address length string char_count 0 0

标签: regex

解决方案


使用 PCRE/Onigmo 兼容的正则表达式引擎,您可以使用

(?:\G(?!^),\s*|\()(?:,?\s*"[^"]*")*,\s*\K[^\s,)]+

请参阅正则表达式演示

详情

  • (?:\G(?!^),\s*|\()- 前一个成功匹配的结尾,然后是一个,和零个或多个空格,或者一个(字符
  • (?:,?\s*"[^"]*")*- 零次或多次出现
    • ,?- 可选逗号
    • \s*- 零个或多个空格
    • "[^"]*"- 一个",零个或多个字符",然后是一个"字符
  • ,- 一个逗号
  • \s*- 零个或多个空格
  • \K- 匹配重置运算符丢弃到目前为止在整体匹配内存缓冲区中匹配的文本
  • [^\s,)]+- 除空格外的一个或多个字符,,以及).

推荐阅读