2013-09-24 147 views
1

在下面的PHP代碼(不是我):preg_match模式中的冒號是什麼?

$has_trailing_slash = preg_match(':/$:', $string); 

什麼是冒號的目的是什麼?如果我刪除它們,則preg_match調用會在字符串中沒有結尾的斜槓時發出抱怨。用冒號,preg_match不會抱怨,如果沒有結尾的斜線。顯然,冒號是某種有條件的或可選的指標,但是這在任何地方都有記錄?我找不到有關通過preg_match或一般的正則表達式使用冒號的文檔。

+1

請參閱[PCRE分隔符](http://www.php.net/manual/en/regexp.reference.delimiters.php)文檔。 –

回答

3

這裏的冒號用作分隔符。

您需要在PHP中使用分隔符作爲正則表達式,以便正則表達式引擎可以知道正則表達式的起始位置以及正則表達式的結束位置,並且不包括您在該函數中使用的引號。

,這是特別重要的,使得正則表達式引擎可以在實際的正則表達式和標誌(如果有的話)的使用之間的區別(例如i(爲不區分大小寫匹配),s(使點匹配換行符),u (以允許Unicode字符匹配)等)

您可以使用各種分隔符,您可以根據具體情況使用'合適'分隔符。例如,最常用的分隔符是正斜槓:/。當您使用正斜槓作爲分隔符時,您將不得不在正則表達式中使用正斜槓(通過使用反斜槓)。

否則,您可以更改分隔符本身,這表示,你可以使用一個分隔符,如#,或!|~{}等等,只要不是字母,數字或反斜線。

這意味着您可以使用:

preg_match(':/$:', $string); 
preg_match('"/$"', $string); 
preg_match('@/[email protected]', $string); 
preg_match('{/$}', $string); 

但是如果你使用/,你必須轉義任何/在正則表達式像這樣:

preg_match('/\/$/', $string); # Either use a backslash 
preg_match('/[/]$/', $string); # Or wrap it around square brackets 

甚至一些怪異的這:

preg_match('\'/$\'', $string); 

使用這將很可能混淆閱讀你的代碼和正則表達式的人可能會被認爲是足夠混亂!

結論,你有各種各樣的分隔符可供選擇,但如果你一致並且儘量不讓你的代碼混淆,那麼這是最好的。

3

我想那些是分隔符。 /的替代品,因爲您的正則表達式模式中有/。因此,使用/將需要轉義它。爲避免轉義,可以使用不同的分隔符。

所以,即使這些是有效的 - #/$#!/$!~/$~,...

0

:是定界符... php是靈活的,你可以使用一些符號站作爲分隔符,以避免逃逸。

相關問題