~~~
[abc]
~~~
>匹配一個字符a或者b或者c
~~~
[a-z0-9A-Z_]
~~~
>匹配到任意數字或字母或下劃線
~~~
[^0-9a-zA-Z_]
~~~
>任意一個非數字或字母或下劃線開頭
~~~
[0-9a-zA-Z]{5}
~~~
>任意5個數字或字母
~~~
[0-9a-zA-Z]{5,}
~~~
>任意5個數字或字母以上
~~~
[0-9a-zA-Z]{5,15}
~~~
>任意5到15個之間的數字或字母
~~~
^[0-9]
~~~
>任意數字開頭
~~~
[0-9]$
~~~
>任意數字結尾
~~~
^[0-9]{11}$
~~~
>一個數字開頭并結尾(精準匹配)
~~~
?
~~~
>表示前面的數量0次或者1次(可有可無)
~~~
-?[0-9]{1,}
~~~
>任意正負數
~~~
*
~~~
>表示前面數量任意次 相當于{0,}
~~~
+
~~~
>表示前面數量至少1次 相當于{1,}
~~~
-?[0-9]+
~~~
>任意正負數必須有一個
~~~
.
~~~
>表示除了換行之外的任意字符
~~~
()
~~~
>具有子存儲功能
## if判斷正則表達式
~~~
if(preg_match('/[0-9]{3}/',$str)){
}
~~~
## 匹配查找
~~~
preg_match('正則',$str,$a);
var_dump($a);
~~~
>只匹配一次
~~~
preg_match_all('正則',$str,$a);
var_dump($a);
~~~
>匹配多次
# 貪婪模式
~~~
$str = "<b>AAAAA</b><b>BBBBBB</b><b>CCCCC</b>";
preg_match_all('/<b>.+<\/b>/',$str,$a);
var_dump($a);
~~~
>匹配字符串中b標簽的內容
~~~
$str = "<b>AAAAA</b><b>BBBBBB</b><b>CCCCC</b>";
preg_match_all('/<b>.+<\/b>/U',$str,$a);
var_dump($a);
preg_match_all('/<b>.+?<\/b>/',$str,$a);
var_dump($a);
~~~
>拒絕貪婪模式
~~~
$str = "<b>AAAAA</b><b>BBBBBB</b><b>CCCCC</b>";
preg_match_all('/<b>(.+?)<\/b>/',$str,$a);
var_dump($a);
~~~
>把匹配到的內容存起來 .+?或者.*?
# 重復模式單元
~~~
$a = array("2017-4-18","2017-4,18","2017,4,18","2017,4-18");
//使用正則把上面有效日期過濾出來
$b = preg_grep('/[0-9]{4}([-,])[0-9]\\1[0-9]{2}/',$a);
var_dump($a);
~~~
>\\\1意思是重復前面第一個小括號匹配到的內容
~~~
$str = "21,516;156’156.165[";
preg_replace('/[^0-9]/','',$str);
~~~
>把不是數字的內容替換成空格
~~~
$a = '2017-4-18';
preg_replace('/([0-9]{4})-([0-9])-([0-9]{2})/','\\2/\\3/\\1',$a);
var_dump($a);
~~~
>將字符串2017-4-18替換為外星時間 日 月 年 18/4/2017