正則表達式的常用函數:
先寫一個函數show,用來輸出數組,使代碼看起來方便,且把經常重復用到的量放在前面
function show($var=null)
{if(empty($var))//檢測變量是否為空{echo 'null';}elseif (is_array($var)||is_object($var))//檢測變量是否為數組或對象{echo '<pre>';print_r($var);echo '<pre>';}else{echo $var;}$pattern='/[0-9]/';
$subject="gyg87yuhg765t6rtfygvhfct7";
$replacement="¥";
1.
preg_match($pattern,$subject,[array&matches])和preg_match_all($pattern,$subject,[array&matches])
作用:
進行匹配,返回匹配的個數
變量:
$pattern
正則表達式,$subject
目標字符串,[array&matches]
把匹配到的字符串放到一個數組中,可選
區別:
preg_match($pattern,$subject,[array&matches])
*****只進行一次匹配,返回值為匹配個數,只有0和1preg_match_all($pattern,$subject,[array&matches])
***匹配完全部目標數據,返回匹配個數
例:
//preg_match($pattern,$subject,[array&matches])*****只進行一次匹配,返回值為匹配個數,只有0和1
//,preg_match_all($pattern,$subject,[array&matches])***匹配完全部目標數據,返回匹配個數
$m1=$m2=array();$t1=preg_match($pattern,$subject,$m1);
$t2=preg_match_all($pattern,$subject,$m2);show($m1);
echo "<hr />";
show($m2);
echo "<hr />";
show($t1.'||'.$t2);
echo "<hr />";
2:
preg_replace($pattern,$replacement,$subject)preg_filter($pattern,$replacement,$subject)
功能:
實現查找并替換
參數:
$replacement替換成的字符
返回值:
替換后的字符串
區別:
當subject對應數組單元中沒有滿足正則表達式的值時,preg_replace會保留原來的數組單元,preg_filter會刪除不符合表達式的數組單元,僅保留有滿足表達式的單元
普通字符串二者作用差不多
$re=preg_replace($pattern,$replacement,$subject);
$fil=preg_filter($pattern,$replacement,$subject);show($re);
echo "<br />";
show($fil);
對象為數組時:
$pattern_rf=array('/[0123]/','/[456]/','/[789]/');
$replacement_rf=array('啊','西','吧');
$subject_rf=array('yty65','vh1jh','hghg','8uhhj','gggy');
$re_rf=preg_replace($pattern_rf,$replacement_rf,$subject_rf);
$fil_rf=preg_filter($pattern_rf,$replacement_rf,$subject_rf);echo "<hr />";
show($re_rf);
echo "<br />";
show($fil_rf);
3:
preg_grep($pattern,$subject_rf)
作用:
在目標數組中匹配并且只保留匹配到的數組的單元,相當于preg_filter取消替換功能
$gr=preg_grep($pattern,$subject_rf);
echo "<hr />";
show($gr);
4:
preg_split($pattern,$subject);
preg_quote($str)
作用:
preg_split
通過pattern 匹配字符串,并以匹配到的字符串作為分割點分割字符串,將分割得到的若干字符串保存到一個數組中,作為函數返回值返回 preg_quote
轉義
$spl=preg_split($pattern,$subject);
echo "<hr />";
show($spl);
echo "<hr />";
$str='{hhhhhhhhh[]}';
show($str);
echo "<br />";
$str=preg_quote($str);
show($str);
echo "<hr />";
正則表達式的語法
1,界定符:
作用:
標志正則表達式開始和結束
類型:
//,##,{}
推薦在線工具:regexpal
2.原子
分為可見原子和不可見原子,可見原子即可以看見的字符串,不可見原子即看不見的字符串,例如空格,制表,回車等
3.元字符:
元字符作用
1.表示原子的篩選方式:
|,[],[^]
[]表示匹配內部元素,如;[0-9]
表示匹配0-9的數字,二[^]
表示匹配除[]
內的元素,注意:^
必須更在[
后面
2.表示原子的集合
. \d \D \s \S \w \W
各自的作用:
.
:匹配除換行外的所有字符\d
: 匹配0-9的數字,類似于[0-9]
\D
: 匹配除0-9外的所有元素,類似于[^0-9]
\s \S
:匹配不可見(可見)原子\w \W
:匹配任意(非)字母數字下劃線
4.量詞
表示某個原子出現的次數
{n}
;表示某個原子恰好出現n次
{n,}
:表示某個原子至少出現n次
{n,m}
:表示某個原子至少出現n次,至多m次
*
:表示某個原子至少出現0次
+
:表示某個原子至少出現1次
?
:表示某個原子至少出現0次,至多1次
5.邊界控制
^
: 匹配字符串開始的位置
$
: 匹配字符串結束的位置
匹配成功必須要以^
之后的原子開始,以$
之前的原子結束
6.模式單元
(pattern)
:模式單元中的正則表達式可以當作一個原子看待
7.修正符
1.貪婪匹配與懶惰匹配
貪婪匹配取其長,懶惰匹配(修正符:U)取其短
$pattern_xz_TL='/\d.+zjb/';
$subject_xz="uuuhytftdr677tz7tdrzjbhbhzjbbhjzjb,,,";
$matches_xz_TL=array();
preg_match($pattern_xz_TL,$subject_xz,$matches_xz_TL);
show($matches_xz_TL);
echo "<br />";
$pattern_xz_LD='/\d.+zjb/U';
$matches_xz_LD=array();
preg_match($pattern_xz_LD,$subject_xz,$matches_xz_LD);
show($matches_xz_LD);
echo "<hr />";
如上,使用貪婪匹配,匹配到第一個zjb后會繼續匹配,直到匹配完整個字符串,若使用懶惰匹配,則匹配到第一個zjb后就直接返回
常用修正符:
U
:懶惰匹配
i
:忽略大小寫
x
:忽略空白
s
:使.
包含換行符,匹配所有