1.认识正则
正则其实就是字符串规则表达式。来看一个栗子:
$str = 'hi,this is his history';
$patt = '/hi/';
preg_match_all($patt,$str,$matches);
print_r($matches);
- ^ 匹配字符串的开始
- $ 匹配字符串的结尾
- \b 匹配单词的开始和结尾(边界)
- \B 匹配单词的非边界
2.常用字符簇
簇 | 代表 |
---|---|
.(点) | 任意字符,不含换行 |
\w | [a-z A-Z 0-9_ ] |
\W | \w 的补集 |
\s | 空白符,包括\n\r\t\v等 |
\S | 非空白符 |
\d | [0-9] |
\D | 非数字 |
3.单词匹配
// 把字符串的 hi 单词找出来
$patt = '/\bhi\b/';
$str = 'hi, this is some history book';
preg_match_all($patt, $str, $res);
print_r($res);
// 把包含在单词内部的 hi 找出来
$patt = '/\Bhi\B/';
$str = 'hi, this is some history book';
preg_match_all($patt, $str, $res);
print_r($res);
4.集合与补集示例
// 找出手机号,必须由[0,1,2,3,5,6,8,9]组成,长度为11
$patt = '/^[01235689]{11}$/';
$patt = '/^[^47]{11}$/';
$arr = array('13800138000','13426060134','170235','18289881234568782');
foreach($arr as $v) {
preg_match_all($patt, $v, $res);
print_r($res);
}
5.字符范围
// 找出纯字母组成的单词
$str = 'o2o, b2b, hello,world, that';
$patt = '/\b[a-zA-Z]{1,}\b/'; //{1,}最少一个字母
$patt = '/\b[a-zA-Z]+\b/';
preg_match_all($patt, $str, $res);
print_r($res);
6.字符簇
字符簇就是系统规定好的表示方法。
// 把单词拆开
$str = 'tommorw is another day , o2o , you dont bird me i dont bird you';
$patt = '/\W{1,}/'; // \W->\w[a-zA-Z0-9]的补集
print_r(preg_split($patt, $str));
//把多个空格或制表换成一个空格
$str = 'a b heloo world'; // 'a b hello world';
$patt = '/\s{1,}/'; //\s空白符,包括\n\r\t\v等
//preg_replace — 执行一个正则表达式的搜索和替换
echo preg_replace($patt, ' ', $str);
7.找几个
- *匹配前面的子表达式零次或多次