是否可以使用标准正则表达式解析器匹配引号外的文本? 我已经看到了这个答案,但它是通过使用PCRE完成的:
Can regex match all the words outside quotation marks?
由于使用PERL,这不是一个纯粹的解决方案。我知道它也可以通过使用编程语言来解决,但我的想法是使用纯正则表达式解析器。
我做过这样的事情,但这不能正常工作
[^'"]*(?=(?:(['"])+(.*?\1))|([^'"]*$))
提前谢谢。
UPD1 :我们的想法是匹配引号外的任何类型的文字,解决方案不能依赖于输入。
答案 0 :(得分:7)
<yourtext>(?=(?:[^"]*"[^"]*")*[^"]*$)
是的,你可以使用积极的前瞻来做。但这假设你有平衡的"
并且在某处没有流浪"
。参见演示。
答案 1 :(得分:2)
我提出了这个解决方案:
(?:[^"](?=(?:[^"]*?(?:["][^"]*?["][^"]*?)+$)|(?:[^"]*?$)))*|(^[^"]*["][^"]*$)
如果我们有奇数引号,它将无法正常工作 - 在这种情况下,它将跳过第一个引号。
但对我来说这是最好的解决方案。
答案 2 :(得分:1)