/** * Preprocess. * * @param string $string * * @return string */ protected function prepare($string) { $string = preg_replace_callback('~[a-z0-9_-]+~i', function ($matches) { return "\t".$matches[0]; }, $string); return preg_replace("~[^\p{Han}\p{P}\p{Z}\p{M}\p{N}\p{L}\t]~u", '', $string); }
今天在看laravel的一個漢語轉拼音的擴展包的時候,遇到這麼一段代碼,有兩個地方看不懂。php
第一個 正則中用的 ~~ 符號laravel
看完後沒有查閱到任何能夠幫助到個人資料,因而通過實驗後發現~和/的做用同樣,表示這是一個正則表達式的定界符。正則表達式
第二個 最後一段正則\p{Han}\p{P}.net
查看了php 官方手冊翻譯
http://php.net/manual/zh/regexp.reference.unicode.phpcode
裏面的解釋仍是有些只知其一;不知其二的感受,沒有理解其中的一段話(多是翻譯不太貼切致使的)regexp
Unicode 字符集在具體文字中定義。使用文字名能夠匹配這些字符集中的一個字符。例如:unicode
經實驗,理解爲能夠匹配某種語言的一個字符。Han就表示中文string