php中常用的正则表达式函数
preg_match()
preg_match_all()
preg_replace()
preg_filter()
preg_grep()
preg_split()
preg_quote()
接下来比拟讲解:
讲解中 $pattern 常日正则表达式 $subject 常日表示目标处理数据
定义一个方法 方便查看数据类型:
function show($val = null){
if(empty($val)){
//打印空
echo 'mull';
}elseif(is_array($val) || is_object($val)){
//打印数组或者工具
echo '<pre>';
print_r($val);
echo '</pre>';
}else{
//打印string int float
echo $val;
}
}
preg_match()与preg_match_all()/方法大略解释/
preg_match($pattern,$subject,[array &$matches])
//匹配一次 第三个参数可选 匹配结果放置matches数组
preg_match_all($pattern,$subject,array &matches)
//匹配多次 三参必选 匹配结果放置matches数组
$pattern = '/[0-9]/';
$subject='b5fg4sgf3sd2f1g';
$m1 =preg_match($pattern,$subject,$arr1);
show($m1);
show($arr1);
/
1
Array
(
[0] => 5
)
/
$m2 =preg_match_all($pattern,$subject,$arr2);
show($m2);
show($arr2);
/
5
Array
(
[0] => Array
(
[0] => 5
[1] => 4
[2] => 3
[3] => 2
[4] => 1
)
)
/
2.preg_replace()与preg_filter()
/方法大略解释/
/
preg_replace与preg_filter
preg_replace($pattern,$replacement,$subject)
//正则更换函数被更换工具是数组 返回全部
//正则更换函数 被更换工具是数组 仅返回被更换元素
遐想:str_repalce()
echo str_replace(\公众world\"大众,\"大众Shanghai\"大众,\"大众Hello world!\"大众);
//得到Hello Shanghai!
//第一测 字符串中更换字符串 结论:此处preg_replace()与preg_filter()无差异
$pattern = '/[0-9]/';
$subject='b65fg4sgf3sd2f1g';
$replacement = '_';
$str1 = preg_replace($pattern,$replacement,$subject);
$str2 = preg_filter($pattern,$replacement,$subject);
echo '<hr>';
show($str1);
echo '<br>';
show($str2);
/
b__fg_sgf_sd_f_g
b__fg_sgf_sd_f_g
/
//第二测 字符串中根据数组正则 更换 结论:此处preg_replace()与preg_filter()无差异
$pattern = array('/[123]/','/[456]/','/[789]/');
$subject='b123fg3456sgf3789f1g';
$replacement = array('天','地','人');
$str3 = preg_replace($pattern,$replacement,$subject);
$str4 = preg_filter($pattern,$replacement,$subject);
echo '<hr>';
show($str3);
echo '<br>';
show($str4);
/
b每天天fg天地地地sgf天大家人f天g
b每天天fg天地地地sgf天大家人f天g
/
//第三测 数组中根据数组正则 更换 结论:此处展示preg_repalce()与preg_filter()差异
$pattern = array('/[123]/','/[456]/','/[789]/');
$subject=array('b','fg3','456','sgf','789','fg');
$replacement = array('天','地','人');
$str5 = preg_replace($pattern,$replacement,$subject);
$str6 = preg_filter($pattern,$replacement,$subject);
echo '<hr>';
show($str5);
echo '<br>';
show($str6);
/
Array
(
[0] => b
[1] => fg天
[2] => 地地地
[3] => sgf
[4] => 大家人
[5] => fg
)
Array
(
[1] => fg天
[2] => 地地地
[4] => 大家人
)
/
3 . preg_grep($pattern, array $subject) //此处$subject只可以为一维数组
/函数解释/
preg_grep($pattern,array $input)//只可以匹配一维数组 返回匹配成功的数组元素
可以理解preg_grep()为阉割版 preg_filter()
只做了匹配 不作更换
$pattern = '/[0-9]/';
$subject=array('b','fg3','456','sgf','789','fg');
$arr = preg_grep($pattern,$subject);
show($arr);
/
Array
(
[1] => fg3
[2] => 456
[4] => 789
)
/
4 . preg_split($pattern,$subject)//一匹配成功为切割点切割字符串成数组
可以理解preg_split()升级版的explode()
$pattern = '/[0-9]/';
$subject='bfg3456sgf789fg';
$arr = preg_split($pattern,$subject);
show($arr);
/
Array
(
[0] => bfg
[1] =>
[2] =>
[3] =>
[4] => sgf
[5] =>
[6] =>
[7] => fg
)
/
5 . preg_quote($str) 正则运算符转译
/
preg_quote($str) 正则运算符转译
. \ + ? [ ^ ] $ () {} = ! < > | : -
/
echo '<hr>';
$str = \公众qewr{asdf}[123]\公众;
$str =preg_quote($str);
print_r($str);
/
qewr\{asdf\}\[123\]
/
大略总结通性:
preg_ 开头
除preg_quote函数以外,第一个参数都是正则表达式
preg_match 表单验证等
preg_replace 造孽词语过滤等