2011-03-12 40 views
0

我一直在抨擊我的頭對此一段時間了。我需要一個正則表達式來匹配一個字符串,只要它沒有被轉義。例如,這個正則表達式需要匹配<string>\\<string>,但不匹配\<string>,以及它之前的任意數量的轉義(所以匹配偶數個轉義符,但不是奇數)。正則表達式只匹配非轉義字符串

理想情況下,所有的東西都不重要,這樣我所尋找的這個美妙的小正則表達式記錄可以被任何人用來在任何表達式前打耳光,以便只返回正確的非轉義字符串。這個正則表達式必須在PHP中運行。

從理論上講,這應該逃跑的前兩個級別,但它並不:

(?<!\\(?<!\\\\)) 

除此之外,該方法必須非常大,以處理轉義字符每一個可能的長度。

更具體地說,我在preg_replace()中使用了這個正則表達式。這樣做是爲了消除quake3 Arena玩家別名,使用另一個正則表達式來匹配彩色化字符串。基本上,我正在尋找一個匹配^<alphanumeric-char>\\^<alphanumeric-char>的正則表達式,但不是\^<alphanumeric-char>

一個例子:

$find = "^3Foo^7bAR\^7kicks\\^bass"; 

$string = preg_replace('<regex>', '', $find); 

應該返回$string = "Foobar\^7kicks\ass"

+0

你如何使用這個正則表達式? preg_match_all? preg_replace函數?你能提供一個代碼示例嗎? – 2011-03-12 22:32:18

+0

您需要用分隔符(通常爲'/')圍繞模式,以便在第二個分隔符後添加修飾符。 – 2011-03-12 22:46:14

+0

不應該是'FoobAR \^7kicksbass'嗎? – Gumbo 2011-03-12 22:50:25

回答

2
'~\\\\.(*SKIP)(*FAIL)|<string>~' 

簡而言之,

+0

哦你PCRE嚮導! – Gumbo 2011-03-12 23:19:14

+0

最近的一個呢!我只需要再次運行字符串並清除//的。 – Dakota 2011-03-12 23:37:33