php正則表達式 unicode編碼屬性

/**
 * 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

  • \p{Greek}
  • \P{Han}

經實驗,理解爲能夠匹配某種語言的一個字符。Han就表示中文string

相關文章
相關標籤/搜索