正则表达式匹配引号外的所有单词?

时间:2014-10-28 13:34:34

标签: regex language-agnostic match

是否可以使用标准正则表达式解析器匹配引号外的文本? 我已经看到了这个答案,但它是通过使用PCRE完成的:

Can regex match all the words outside quotation marks?

由于使用PERL,这不是一个纯粹的解决方案。我知道它也可以通过使用编程语言来解决,但我的想法是使用纯正则表达式解析器。

我做过这样的事情,但这不能正常工作

[^'"]*(?=(?:(['"])+(.*?\1))|([^'"]*$))

提前谢谢。

UPD1 :我们的想法是匹配引号外的任何类型的文字,解决方案不能依赖于输入。

3 个答案:

答案 0 :(得分:7)

<yourtext>(?=(?:[^"]*"[^"]*")*[^"]*$)

是的,你可以使用积极的前瞻来做。但这假设你有平衡的"并且在某处没有流浪"。参见演示。

http://regex101.com/r/sU3fA2/29

答案 1 :(得分:2)

我提出了这个解决方案:

(?:[^"](?=(?:[^"]*?(?:["][^"]*?["][^"]*?)+$)|(?:[^"]*?$)))*|(^[^"]*["][^"]*$)

http://regex101.com/r/pI8xA4/2

如果我们有奇数引号,它将无法正常工作 - 在这种情况下,它将跳过第一个引号。 但对我来说这是最好的解决方案。

答案 2 :(得分:1)

此模式将捕获双引号外的单词

"[^"]+"|(\S+) 

Demo

或此模式用于捕获双引号外的句子,您将不得不修剪额外的空格

"[^"]+"|([^"]+)

Demo