2011-02-08 27 views
14

可能重複:
Is there a PHP function that can escape regex patterns before they are applied?擺脫使用字符串中的正則表達式

我想使用存儲在一個變量正則表達式的字符串。 (PHP中)轉義字符串以用於(PCRE)正則表達式的最佳方式是什麼?

例如,

$text = 'm/z'; // this is the text I want to use as part of my regular expression 
$text_regexp = '#' . $text . '#i'; // this is my regular expression 

還會送

$text_regexp = '#m/z#i'; 

但我想下面的正則表達式:

$text_regexp = '#m\/z#i'; 

這是一個人爲的例子,但我想說明這一點簡單。

回答

36

preg_quote

從手冊:

把反斜槓在每 字符屬於正則 表達式語法的一部分的前

還可以通過使用分隔符作爲第二個參數,它也會被轉義。但是,如果您使用的是#作爲分隔符,則不需要轉義/

+0

謝謝你的快速回答。 – Tomba 2011-02-08 17:43:58

+0

不客氣。樂意效勞。 – webbiedave 2011-02-08 17:45:26

4

檢查this。你可以使用preg_quote();.

5

所有這些問題的答案是正確的,只有metachars需要進行轉義。 它的種類太糟糕了,因爲php doesen沒有像preg_match([operator]/$ var /)這樣的正則表達式運算符,因此delimeters可能是引用代理程序。這樣,分隔符就不必在外部$ var中引用。 (Perl有m //,s ///或=〜運算符)

preg_quote是一個不錯的方法,不幸的是,有時候你想匹配文字'\ char'而不將它轉義爲' \ char'例如,並逃脫其餘。 preg_quote()沒有多少選擇。

你可以從字面上設置你自己的PHP函數,引用metachars(或在preg_quote()之後取消引用)。

像一個全部替換/([{}\[\]()^\$.|*+?\\<>$delim])/\\$1什麼的。設置$ delim,並且/或者取出可能的轉義或任何其他您不想轉義的元。

只是我的.02

相關問題