我很确定,使用正则表达式无法做到这一点,但是也许你们当中的一个人知道的更好。
到目前为止,这是我的模式:
^\[\s*"[^\n]+?(?<!\\)"(?:,\s*"[^\n]+?(?<!\\)")*\s*\]
(采用.NET语法,(?:)
是一个非捕获组,
(?<!)
是对该组的负面评价)
它用于json字符串数组,因此在这里我必须注意转义的双引号。
(?<!\\)"
我的问题是,我的模式与以下示例字符串匹配:
["", ""]
还有
["1"", "2"]
我知道为什么:
[^\n]+?
具有结尾的非贪婪符号,但在第一个示例字符串中捕获了未转义的结束双引号以匹配"[^\n]+?(?<!\\)"
,在第二个示例字符串中捕获了另一组,\s*"[^\n]+?(?<!\\)"
。
我需要的是一个正则表达式,无论下一个出现什么,它总是在第一个收尾未转义的双引号处停止。
所以我认为对于正则表达式而言,它太含糊了。
答案 0 :(得分:1)
这可能会做到
true
(?s)^\[\s*"[^"\\]*(?:\\.[^"\\]*)*"(?:\s*,\s*"[^"\\]*(?:\\.[^"\\]*)*")*\s*\]