2013-03-04 63 views
1

我想寫一個正則表達式來匹配單引號,這可能會被轉義。匹配的報價在它之前應該有偶數個反斜槓(奇數意味着報價被轉義)。例如,在這五個字符串:正則表達式匹配可能逃過的引號

'quotes should be matched' 
\'quotes should NOT be matched\' 
\\'quotes should be matched\\' 
\\\'quotes should NOT be matched\\\' 
\\\\'quotes should be matched\\\\' 

這裏是我的正則表達式:

(?<=[^\\](?:\\\\)*)' 

然而,這不符合在上面的例子中任何東西。我覺得這是奇怪,因爲從正則表達式去除*引號用兩個反斜槓匹配,因爲它應該:

(?<=[^\\](?:\\\\))'比賽\\'

+1

正則表達式通常不是像這樣匹配的最佳工具 – 2013-03-04 21:58:02

+0

我真的沒有選擇我的情況。出於好奇,我的選擇是什麼? – Joel 2013-03-04 21:59:18

+0

您使用哪種編程語言? – chepner 2013-03-04 22:07:54

回答

3

據我所看到的,它不可能只是'匹配。這是因爲你不能像Wiseguy指出的那樣有動態長度的後顧之憂。

但是,以下正則表達式會匹配正確的'和任何\ s。不知道這將是任何使用..

(?<!\\)(?:\\\\)*' 

匹配的雙\任意數量不是由\前面和後面一個'

+0

我可以使用它 - 謝謝。 – Joel 2013-03-04 22:36:08

+1

你可以用'\ K'來模擬可變長度後顧之道。 '(?<!\\)(?:\\\\)* \ K''只匹配'''。 http://regexr.com?340ef – Wiseguy 2013-03-04 22:41:18