2012-03-02 63 views
0

我寫了非常複雜的正則表達式,並使用Rubular editor進行了測試,幾個小時後我意識到它在PHP中不起作用。有效的正則表達式在php中不起作用((\\ | \ | | | [^ \ | |))*?

這是較長的正則表達式的只是微不足道的一部分:

((\\\\|\\\|)|[^\\\|])*? 

我有以下的條件下馬赫字符串。

  1. 字符串可能包含|字符只能轉義爲\|
  2. 字符串可能包含\字符只能轉義爲\\
  3. 字符串可能爲空。

這意味着像

test 
test\\ 
test\| 
t\\e\|s\|\|t\\\\\\\\\\ 

字符串是CORRECT和字符串等

test\ 
test|\ 
\ 
| 
test\\\\| 

不正確

此外,Rubular接受[^\\\|][^\|\\](相同)。 PHP不適用於[^\|\\]。爲什麼?

這裏是我看不到的東西,因爲我認爲這兩個字符都已正確轉義,但PHP不同意我的看法。

See this example in Rubular

我仍然在這個表達式新的東西,所以不要怪我的愚蠢。

在此先感謝!

+0

這聽起來像你想使用一個原始字符串。傳遞'var_export($ yourRegexString,true);'是否有訣竅? – dangerChihuahua007 2012-03-02 00:37:21

回答

4

您需要在PHP中引用時加倍轉義\。

regex = "/((\\\\\\\\|\\\\\\|)|[^\\\\\\|])*?/"; 
+0

@ Wh1T3h4Ck5,向我們展示您正在使用的代碼,以便我們提供幫助。你可能想用'^'和'\ z'或'$'來表達式。 – Qtax 2012-03-02 00:50:57

+0

是的,我的壞。還沒有逃過測試字符串中的一些斜線,現在看起來工作正常。我要用完整的模式來測試它是否會導致問題?完整模式看起來像這樣:'/(\ [(([az] [a-z0-9] *〜)|(〜[az] [a-z0-9] *(\ |([az] [a- Z0-9] *(=(((\\\\\\\\ | \\\\\\ |)| [^ \\\\\\ |?])*))?))*〜 ?))])/ i'',但其他部分已經過測試,這個問題很嚴重。但是,你的回答是正確的,那就是我正在尋找的。非常感謝。 – Wh1T3h4Ck5 2012-03-02 01:05:03