爲什麼preg_match
針對PHP和其他語言的其他正則表達式函數的preg_match
在表示要搜索的模式的字符串中有//
這樣的分隔符?用於正則表達式函數的正斜槓是什麼?
我幾乎沒有使用正則表達式的經驗,但使用這兩個分隔符表示字符串pattern
的開始和結尾的原因對我來說並不明顯,因爲您可以只使用字符串的開始和結尾。
爲什麼preg_match
針對PHP和其他語言的其他正則表達式函數的preg_match
在表示要搜索的模式的字符串中有//
這樣的分隔符?用於正則表達式函數的正斜槓是什麼?
我幾乎沒有使用正則表達式的經驗,但使用這兩個分隔符表示字符串pattern
的開始和結尾的原因對我來說並不明顯,因爲您可以只使用字符串的開始和結尾。
一般來說,反斜槓是逃生。他們從角色中刪除重要性,以便角色看起來像是什麼樣。在其他情況下,反斜槓爲字符添加重要性,將其轉化爲元字符。例如在正則表達式中:
/d/ - look for a character "d"
/\d/ - look for a digit: 0,1,2,3,4,5,6,7,9, aka [0-9] - adding significance
/\\/ - look for a literal \ char - REMOVING significance
//是正斜槓。它們只是默認的標準分隔符,因爲它們是Perl中使用的標準分隔符,而PHP實現了PCRE - Perl兼容的正則表達式。
$m =~ /d/ - perl for matching a "d" character in a string
$m =~ /\d/ - perl for matching a digit
在PHP中,因爲正則表達式僅僅是字符串,並不是核心語言的一部分,你可以使用任何你想要的分隔符。你圖案中的第一個字符變成分隔符:
preg_match('/foo/', $str) #1, using/forward slashes as delimiter
preg_match('|foo|', $str) #2, using | pipes as delimiters
preg_match('f\foof', $str) #3, using the letter F as delimiter
注意現在你可以使用任何你想要的字符。 f
第三個正則表達式是模式的第一個字符,所以它是分隔符。這意味着如果您使用該正則表達式在您的文本中查找「f」,則需要跳過該F(\f
),以便內部F被看作只是一個f,而不是模式分隔符
PHP使用Perl風格的正則表達式,所以我猜,Perl'發明了'這個語法。
這些分隔符用於將某些修飾符添加到正則表達式中。當然PHP也可以在函數調用中使用標誌或類似的東西來做到這一點,但這會改變Perl的語法。
所以我認爲這些分隔符用於歷史目的。
而你還沒有在PHP文檔或其他地方找到這個答案? – anubhava
聖潔的廢話,我是一個白癡@anubhava。好吧,原因現在很明顯。一個放置標誌的地方。例如(PHP文檔):'//模式分隔符後的「i」表示不區分大小寫的搜索。什麼是適當的行動方式,因爲這是一個微不足道的問題......現在就結束我的問題? – ironicaldiction
如果你想要,你可以刪除你的答案。 – anubhava