~~~
[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