正则表达式匹配引号外的所有单词?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式匹配引号外的所有单词?相关的知识,希望对你有一定的参考价值。
是否可以使用标准正则表达式解析器匹配引号外的文本?我已经看到了这个答案,但它是通过使用PCRE完成的:
Can regex match all the words outside quotation marks?
由于使用PERL,这不是一个纯粹的解决方案。我知道它也可以通过使用编程语言来解决,但我的想法是使用纯正则表达式解析器。
我做了类似的事情,但这不能正常工作
[^'"]*(?=(?:(['"])+(.*?1))|([^'"]*$))
先感谢您。
UPD1:想法是匹配引号外的任何类型的文本,解决方案不能依赖于输入。
答案
<yourtext>(?=(?:[^"]*"[^"]*")*[^"]*$)
是的,你可以使用积极的前瞻。但这假设你有平衡的"
并且没有流浪的"
躺在某处。参见演示。
http://regex101.com/r/sU3fA2/29
另一答案
我想出了这个解决方案:
(?:[^"](?=(?:[^"]*?(?:["][^"]*?["][^"]*?)+$)|(?:[^"]*?$)))*|(^[^"]*["][^"]*$)
http://regex101.com/r/pI8xA4/2
如果我们有奇数引号,它将无法正常工作 - 在这种情况下,它将跳过第一个引用。但它现在是我最好的解决方案。
另一答案
此模式将捕获双引号外的单词
"[^"]+"|(S+)
或者这种模式用于捕捉双引号外的句子,你必须修剪额外的空格
"[^"]+"|([^"]+)
以上是关于正则表达式匹配引号外的所有单词?的主要内容,如果未能解决你的问题,请参考以下文章