2011-09-19 106 views
0

我有一個正則表達式應該匹配一些形式的字符串:src =「/ blkjad.dafsdf」>。它看起來像這樣:(src | href)(\ s *)?=(\ s *)?(\「| \')/([^ /]。*?)\ 4.雙引號不匹配(蛋糕)PHP正則表達式

在我正在運行的一個站點上罰款,它在另一個站點上失敗,建立在Cake中。這裏是另一個失敗的Regex =>'/(「)/',它應該與該行中的任何雙引號匹配。

我現在虧本了。我工作的一位高級開發人員只是看了一眼,基本上搖了搖頭。不幸的是,我並不熟悉Cake,我似乎無法在網上找到任何類似的問題。有任何想法嗎?

編輯:對於記錄,失敗的正則表達式使用preg_match_all,而其他(相同/工作正則表達式)使用preg_replace。這裏有一些相關的代碼。

$regex['php'] = '/(src|href)(\s*)?=(\s*)?(\"|\')\/([^\/].*?)\4/'; 

$php = htmlspecialchars(file_get_contents(sprintf('/home/x/x/x/x/x/%s.%s', $string, $extension)));             echo $php; 

if (preg_match_all($regex['php'], $php, $out)){ 
    echo sizeof($out); 
    echo nl2br(print_r($out, true)); 
} else { 
    echo 'Doesn\'t work'; 
} 
+0

如何粘貼一些相關的代碼?這個正則表達式被傳遞到Cake-framework函數中嗎?還是使用preg_ *系列功能?您幾乎沒有提供可能有助於解決問題的上下文信息。 – Xorlev

+0

謝謝。第一篇文章。 – yatakaka

+0

您還可以添加一些失敗的測試輸入和預期輸出嗎? – Xorlev

回答

1

我認爲問題來自htmlspecialchars()調用。

PHP documentation

執行的翻譯說是:

  • '&'(符號)變成 '&'
  • '「'(雙引號)變爲 '"'
  • 未設置ENT_NOQUOTES時,「'」(單引號)僅爲'''
  • 當ENT_QUOTES設置。 '<'(小於)成爲 '<' '>'(大於 比)變爲 '>'
+0

哇!謝謝。非常愚蠢的疏忽。 – yatakaka