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

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+) 

Demo

或者这种模式用于捕捉双引号外的句子,你必须修剪额外的空格

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

Demo

以上是关于正则表达式匹配引号外的所有单词?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配(替换)跨度标签之间单词中所有出现的双引号

正则表达式:匹配文本段落中除特定短语外的所有内容

除三个句点(省略号)外的字母周围句点的正则表达式

关于正则表达式的一些基础知识

正则表达式逐行:如何匹配三引号而不是双引号

android java 正则表达式匹配除一个字符外的所有字符