2014-10-28 135 views
2

是否有可能通過使用標準正則表達式解析器匹配引號外的文本? 我看到這個答案,但它是通過使用PCRE完成:正則表達式匹配引號外的所有單詞嗎?

Can regex match all the words outside quotation marks?

這是不是因爲使用PERL的純解決方案。我知道這也可以通過使用編程語言來解決,但這個想法是使用純正則表達式解析器。

我做了這樣的事情,但這不能正常工作

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

預先感謝您。

UPD1:這個想法是要匹配引號外的任何一種文本,解決方案不能依賴於輸入。

+0

**語言不可知正則表達式**它是什麼? – anubhava 2014-10-28 13:36:16

+1

我不認爲有一個適用於所有*語言的單一正則表達式。至少會有一個不支持特定功能的平臺。 – 2014-10-28 13:38:33

回答

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

是的,你可以做到這一點在使用正lookahead.But這裏假設你有平衡"並沒有流浪"躺在somewhere.See演示。

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

0

這種模式將捕獲雙引號

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

Demo

或這種模式來捕捉雙引號外面的句子之外的話,你就必須修剪多餘的空格

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

Demo

0

我想出了這個解決方案:

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

如果我們有奇數個引號就不能很好地工作 - 在這種情況下,它會跳過第一個報價。 但現在對我來說這是最好的解決方案。

+0

請接受其中的一個解決方案,並將問題邏輯結束 – vks 2017-02-15 11:45:40

相關問題