php字串怎麼只提取中文字元

2022-09-22 22:00:31

兩種方法:1、用preg_match_all()配合正則過濾字串,語法「preg_match_all("/[\x{4e00}-\x{9fff}]+/u","$str",$arr);」;2、用preg_replace()配合正則搜尋字串中的非中文字母,並將其替換成空字元,語法「preg_replace("/[^\x{4E00}-\x{9FFF}]+/u",'',$str)」。

php零基礎到就業直播視訊課:進入學習
API 檔案、設計、偵錯、自動化測試一體化共同作業工具:

本教學操作環境:windows7系統、PHP8.1版、DELL G3電腦

在php中,可以利用以下兩種函數來只提取字串的中文字元

  • preg_replace()函數

  • preg_match_all()函數

方法1:使用preg_match_all()函數

preg_match_all()函數配合正規表示式「/[\x{4e00}-\x{9fff}]+/u」可以過濾字串,只獲取中文字元。

會將匹配的中文字元一個個存入陣列中(該陣列由第三個引數指定)。

<?php
header("Content-type:text/html;charset=utf-8");
$str = "歡迎4546來到php這裡。zblog,我的?#$%^天呀&())*(&^";
echo $str;
preg_match_all("/[\x{4e00}-\x{9fff}]+/u","$str",$arr);
var_dump($arr);
?>

1.png

然後可以使用join()函數將結果值拼接成一個字串。

join('',$arr[0])

2.png

說明:

1)preg_match_all()函數

preg_match_all()函數會搜尋字串中所有可以和正規表示式匹配的結果

preg_match_all(pattern,subject,matches,flags,offset)

引數說明如下:

  • pattern:要搜尋的模式,也就是定義好的正規表示式;
  • subject:要搜尋的字串;
  • matches:可選引數(多維陣列),用來存放所有匹配的結果, 陣列排序通過 $flags 指定;
  • flags:可選引數,可以結合下面幾個標記使用(注意不能同時使用 PREG_PATTERN_ORDER 和 PREG_SET_ORDER):
    • PREG_PATTERN_ORDER:結果排序為 $matches[0] 儲存完整模式的所有匹配,$matches[1] 儲存第一個子組的所有匹配,以此類推。
    • PREG_SET_ORDER:結果排序為 $matches[0] 包含第一次匹配得到的所有匹配(包含子組), $matches[1] 是包含第二次匹配到的所有匹配(包含子組)的陣列,以此類推。
    • PREG_OFFSET_CAPTURE:如果這個標記被傳遞,每個發現的匹配返回時會增加它相對目標字串的偏移量。注意這會改變 $matches 中的每一個匹配結果字串元素,使其成為一個第 0 個元素為匹配結果字串,第 1 個元素為匹配結果字串在 subject 中的偏移量。
  • offset:可選引數,$offset 用於從目標字串中指定位置開始搜尋(單位是位元組)。

preg_match_all() 函數可以返回 pattern 的匹配次數(可能是 0),如果發生錯誤則返回 FALSE。

2)join()函數

join() 函數返回一個由陣列元素組合成的字串。

join() 函數是 implode() 函數的別名。

join(separator,array)
  • separator:可選。規定陣列元素之間放置的內容。預設是 ""(空字串)。

  • array:必需。要組合為字串的陣列。

返回值:返回一個由陣列元素組合成的字串。

方法2:使用preg_replace()函數

preg_match_all()函數配合正規表示式「/[^\x{4E00}-\x{9FFF}]+/u」搜尋字串中的非中文字母,並將其替換成空字元''即可。

<?php
header("Content-type:text/html;charset=utf-8");
$str= 'TW511.COM!-=1548';
echo $str."<br>";
$pattern = "/[^\x{4E00}-\x{9FFF}]+/u";
$newstr=preg_replace($pattern,'', $str);preg_match_all("/[\x{4e00}-\x{9fff}]+/u","$str",$arr);
var_dump($newstr);
?>

3.png

說明:preg_replace()

preg_replace() 函數可以執行正規表示式的搜尋和替換,是一個強大的字串替換處理常式,該函數的語法格式如下:

preg_replace($pattern, $replacement, $subject [, $limit = -1 [, &$count]])

引數說明如下:

  • $pattern:要搜尋的模式,可以使一個字串或字串陣列;
  • $replacement:用於替換的字串或字串陣列。如果這個引數是一個字串,並且 $pattern 是一個陣列,那麼所有的模式都使用這個字串進行替換。如果 $pattern 和 $replacement 都是陣列,每個 $pattern 使用 $replacement 中對應的元素進行替換。如果 $replacement 中的元素比 $pattern 中的少,多出來的 $pattern 使用空字串進行替換。
  • $subject:要進行搜尋和替換的字串或字串陣列,如果 $subject 是一個陣列,搜尋和替換回在 $subject 的每一個元素上進行, 並且返回值也會是一個陣列。
  • $limit:可選引數,每個模式在每個 $subject 上進行替換的最大次數。預設是 -1(無限)。
  • $count:可選引數,如果指定,將會被填充為完成的替換次數。

如果 $subject 是一個陣列,preg_replace() 函數會返回一個陣列,其他情況下返回一個字串。

如果函數 preg_replace() 搜尋到匹配項,則會返回被替換後的 $subject,否則返回沒有改變的 $subject。preg_replace() 函數的每個引數(除了引數 $limit)都可以是一個陣列。如果引數 $pattern 和引數 $replacement 都是陣列,那麼該函數將以其鍵名在陣列中出現的順序來進行處理。如果發生錯誤,則返回 NULL。

引數 $replacement 中可以包含後向參照 \\n 或 $n,語法上首選後者。每個這樣的參照將被匹配到的第 n 個捕獲子組捕獲到的文字替換。n 可以是 0-99,\\0 和 $0 代表完整的模式匹配文字。

推薦學習:《》

以上就是php字串怎麼只提取中文字元的詳細內容,更多請關注TW511.COM其它相關文章!