2017-10-21 68 views
0

我試過尋找這個廣泛的,有類似的問題,但我還沒有能夠弄清楚這一點。正則表達式,兩個字符之間的一切除了逃脫字符

我的問題是,我有,等等,這種形式的字符串:

%Aliquam hendrerit mollis pretium! Praesent id% 
%molestie \*libero vel\%\% pulvinar? Sed% 
\%% urna. \% Fusce% in *sapien %mau\*ris.% 

我想選擇兩個%s的一切,忽略其中的字符由\ preceeded情況。第一個是微不足道的,我有辦法做第二個。第三個,但我無法弄清楚。爲了澄清,從上面的文字我要選擇以下內容:

「!%Aliquam hendrerit油樹的Pretium Praesent ID%」

「%molestie *自由人韋爾\%\%枕桑達%?」

「%烏仁娜。\%Fusce%」

「%茅* RIS%」

要指出的是,原文可以是一個很長的字符串的一部分,而不換行,即每一行不一定出現在上面新的線路。

這到目前爲止,我寫了下面的正則表達式,這似乎是能夠匹配除了最後一個一切:

(?<!\\)%([^%]*)(?!%\\)(?:%|(.*)%)(?<!\\%) 

對於最後一個則選擇:

「%烏仁娜\% Fusce%in * sapien%mau * ris。%「

這是太多了。我真的不明白爲什麼它會這樣做,也許是因爲我的正則表達式的條件?任何幫助深表感謝!

+0

難道你不能在第二步中去掉轉義字符嗎?單曲/\\.// g'。而且我有點困惑,你是否想要忽略所有逃脫的字符,或只忽略百分號?您的問題表明預期結果與您的示例不同。 – knittl

+0

問題是,逃脫的字符是允許的,所以我不能把它們去掉。我會編輯主要帖子,希望能夠澄清混亂,對此感到抱歉!編輯:我編輯主要職位正確的例子,我想能夠選擇。 – Scheme

回答

0

此正則表達式將得到預期的結果:

/(?<!\\)(%.*?(?<!\\)%)/ 

看到這個Regex101.com

說明

1 - (?<!\\)%不會被反斜槓任何%字符相匹配。

2 - .*?將以懶惰方式

3匹配任何字符 - 環境(2)與(1)將匹配由不是由反斜槓一個包圍%的任何字符。

+0

確實如此,非常感謝! – Scheme

+0

不客氣。增加了一些解釋來幫助您瞭解過程。 –

相關問題