在之前的文章《PHP字元串學習之怎麼去除其他字元,隻留下數字》中,我們介紹了利用for循環和in_array()或is_numeric()函數來提取字元串中數字字元的方法。這次我們繼續PHP字元串的學習與練習,介紹一下提取字元串中數字字元的另幾種方法。
提取字元串中數字字元,本質上就是字元串過濾操作。看到字元串過濾,我就想起了 “正規表達式”。
正規表達式是對字元串操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個“規則字元串”,這個“規則字元串”用來表達對字元串的一種過濾邏輯。
正規表達式通過建構具有特定規則的模式,與輸入的字元串資訊比較,在特定的函數中使用進而實作字元串的比對、查找、替換及分割等操作。
下面我們看看如何利用正規表達式來過濾字元串,隻提取字元串中的數字字元,傳回由這些數字字元組成的子串。
例如我們給出下面一個字元串
$str ='0我是123456一段測試的字789符串0';
想要傳回由數字字元組成的子串“01234567890”!
方法1、使用preg_replace()函數
<?php
$result = preg_replace("/[^0-9]/", "", $str);
echo $result;
?>
分析一下上面的關鍵代碼:
preg_replace("/
1/", "", $str)的意思為比對除了0~9間的數字以外的字元,并将這些字元替換為空字元,即删除這些字元即可。那麼就隻剩下數字字元了,是以輸出結果為:
1.png
我們來簡單了解一下preg_replace()函數
preg_replace() 函數可以執行正規表達式的搜尋和替換,是一個強大的字元串替換處理函數,該它的文法格式為“preg_replace($pattern, $replacement, $subject [, $limit = -1 [, &$count]])”,表示搜尋 subject 中比對 pattern 的部分, 以 replacement 進行替換;可選參數 limit 用于設定最大可替換次數(預設值是-1,可無限制)。
方法2:使用preg_match_all()函數
$result = '';
preg_match_all('/\d+/',$str,$array);
foreach($array as $arr){
foreach($arr as $value){
$result .= $value;
}
分析一下上面的代碼:
preg_match_all('/\d+/',$str,$array)的意思為在字元串$str中多次查找隻包含0~9間數字字元的子串,将每次的比對結果放在一個數組$array中。我們使用var_dump($array)來輸出這個數組看看:
2.png
會發現結果數組$array是一個二維數組,包含比對結果的元素是内層的數組。而想要将這些元素拼接成一個字元串,就需要嵌套兩層foreach循環:
第一層循環中
将内層數組作為值賦給$arr,是以在第二層循環中需要周遊的數組變成了$arr
在每次循環中,将數組值賦給變量$value,然後使用“.=”運算符拼接到字元串$result中,是以一開始$result需要為空字元串。
輸出結果為:
3.png
我們來簡單了解一下preg_match_all()函數。
preg_match_all()函數可以搜尋字元串中所有可以和正規表達式比對的結果,是一個執行全局正規表達式比對的函數,它的文法格式為
preg_match_all($pattern, $subject [, &$matches [, $flags = PREG_PATTERN_ORDER [, $offset = 0 ]]])
$pattern 正規表達式
$subject 進行比對的字元串
$matches 所有比對結果(數組)
preg_match_all() 将實作全部結果的比對,如果想要比對成功一次後停止比對,需要使用 preg_match() 函數。
好了就說到這裡了,有其他想知道的,可以點選這個哦。→ →php視訊教程
最後給大家推薦閱讀一個經典課程《PHP字元串處理(玉女心經版)》,免費的~快來學習啊!
以上就是PHP字元串學習之利用正則過濾字元,傳回數字字元的詳細内容,更多請關注
富貴論壇 www.fgba.net其它相關文章!- 0-9 ↩