前言
前幾天看php手冊匿名函數一章時,看到示例
| |
初看時,對這三行代碼有點懵…一時沒轉過來,沒想明白為什麼是這結果,這是為什麼呢?
正則定界符
其實剛開始是對 ‘~-([a-z])~‘ 比較懵,正規表達式雖然寫了不少,但也僅限于使用時對照手冊,沒有深入了解…在翻閱資料後恍然大悟.
平日裡寫正規表達式預設是以反斜線//作為正規表達式的定界符,因缺少探索,久而久之理所當然的預設定界符隻能用//
然而資料裡關于定界符的描述是這樣的
定界符,也稱為分隔符,一般為正斜杠 (正斜線)/,但實際上除了字母、數字和反斜線以外的任何字元都可以作為定界符号,隻要前後成對出現即可,比如##、||、//、{}、!!、%% 等等。
也就是說,隻要你喜歡,你可以用 {} [] %% $$ 等等作為定界符…不過,在沒有特殊情況下,還是用建議用//
看懂這則正規表達式,再來看上面這個示例就會變得簡單起來了.
preg_replace_callback
在preg_replace_callback的官方文檔裡,是這樣描述的
preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixed
這個函數的行為除了 可以指定一個 callback 替代 replacement 進行替換 字元串的計算,其他方面等同于 preg_replace()
那上面的示例可以了解為
大專欄 preg_replace_callback解讀 · HH blogure class="highlight php">
| |
實戰
知道 preg_replace_callback 的原理後,我們把最上面的例子稍微修改下
| |
上面修改後的例子就可以在實戰中用來把下劃線命名法(UnderScoreCase)替換成駝峰命名法(CamelCase)
不考慮性能消耗的情況
總結
時刻保持探索精神,遇到讓人懵逼的問題,及時補充,消滅它.當你查資料文檔解決問題的時候,無形中補充了自己的知識面