十分钟正则快速入门

时间:2021-11-05 08:27:34

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.找几个

  • *匹配前面的子表达式零次或多次