2012-03-03 12 views
1

我是新來的正則表達式,我使用RegExr檢查了以下模式,但它在PHP中與preg_replace失敗。正則表達式在'RegExr'中有效,但不能與preg_replace一起使用?

我試着添加一個額外的反斜槓來逃脫第一\ \沒有運氣。

任何幫助指向我在正確的方向將不勝感激。

例子:

$output = preg_replace("\[if](.*)[/if/]*", ' ', $output); 

我也嘗試添加斜線:

$output = preg_replace("/\[if](.*)[/if/]*/", ' ', $output); 

我試圖修改字符串是:

[if] <p>A statement goes here</p> [/if] 
+0

您是否也嘗試讓一些'的error_reporting(〜0)'? – mario 2012-03-03 18:05:11

+1

[PHP正則表達式匹配UNC路徑]的可能重複](http://stackoverflow.com/questions/9485091/php-regex-for-matching-a-unc-path) - 這可能是有見識的,斜槓用PHP字符串編寫的正則表達式。大多數這些在線工具不提供PHP字符串,而只是正則表達式。您需要爲PHP編碼,然後再進行額外的步驟。 – hakre 2012-03-03 18:07:24

+1

請編輯您想要修改的字符串樣本的問題。我不確定這些方括號是否是正則表達式邏輯的一部分,或者是您嘗試匹配的一部分。 – 2012-03-03 18:15:50

回答

3
  1. 逃避所有[如果你有w和]螞蟻它意味着一個文字
  2. 需要分隔符。
  3. 如果模式中出現分隔符,則必須隱藏或選擇另一個分隔符(由於/,我選擇了%)。
  4. 結尾]*,0次或更多] ....你確定嗎?
  5. 我懷疑使用非正規(.*?)更可能需要,但我留給你。

給出:

"%\[if\](.*)\[/if\]%" 
+0

謝謝。這是有道理的 - 欣賞解釋。我替換了它,沒有錯誤 - 但字符串沒有被替換?我已將字符串添加到問題中。 – jsuissa 2012-03-03 18:42:11

+2

原因是你需要刪除最後/從正則表達式。它試圖取代[如果]在那裏[/如果/]。另外,最後一個*也可以。 – 2012-03-03 18:43:37

+0

現在工作完美。 '$ output = preg_replace(「%\ [if \](。*?)\ [/ if \]%」,'',$ output);' – jsuissa 2012-03-03 19:03:47

相關問題