好久没有发表文章,今天心情好,发一篇。首先,我会将详细的参考表放在文章的底部,正文中呢,会拿一些较简单的内容来介绍正则表达式。在正文结束部分呢,也写了三个经典案例作为本次入门的练习,希望能为各位读者提供帮助

拿代码块将正则引入生活:什么是正则,正则就像你在一群人中找一个人。
这个目标人物是高、是胖、是男、是女……
在正则中核心代码其实就两个东西 [ ] 和{ } , [ ] 是用来匹配目标的,
{ }是用来规定匹配次数的 ,其他的东西,你就可以;理解为是基于这两个拓展
出来的

先介绍两个函数

  • 1、preg_match($pattern, $ subject, $matches) 返回第一次的匹配结果
  • 2、preg_match_all($pattern, $subject, $matches) 返回所有的匹配结果

下面我来简单说下这连个函数的参数,

  • $pattern是存放正则表达式的变量
  • $subject是要进行正则匹配的字符串
  • $matches是用来存放匹配结果的
    首先说明一下这个字表达的组成,正则表达式由定界符、原子、元字符、模式修正符
  • 定界符
    正则中要用到的字符是不能用作定界符
    ''反斜线不可以用作正则定界符
    '/'正斜线可以做正则定界符
    ‘#’#号也可以当作定界符
    推介使用正斜线和#号作为定界符
  • 原子
    可见原子(字母字符)和不可见原子(回车换行)
    原子集合 [a-z],[A-Z]、[0-9]
    集合简写 \d 匹配任意一个整数,等价于[0-9]
    \d+ : +表示1个或多个整数,等价于[0-9]+
    \w 表示所有的大小写字母或下划线集合以及数字
    ‘+’ :表示前面的原子至少出现一次或者多次
    ‘*’ : 匹配0次到多次
    ‘?’ : 匹配0次或1次
    正则中不允许直接写中文,因为中文存在不同的编码集 中文字符集 GBK UTF-8
    1、GBK :2个字节表示一个中文字符
    2、UTF-8 : 3个字节表示一个中文字符
    必须将中文转为:unicode编码 unocode不仅使用于中文,还适用日文和韩文等多字节字符
  • 元字符
    元字符是原子的解释器 需要配合原子一起使用
    元字符是原子的保镖,原子在哪里元字符就在那里
    ‘.’ : 点匹配除换行符\n之外的所有字符
    ^ : 脱字符,单独使用是限制起始原子,放在方括号中式取反
    $ : 限制必须以前的原子结尾的字符才可以匹配成功
    {n} : 表示其前的原子正好出现n次
    {n,} : 表示其前的原子至少出现n次
    {n,m} : 表示其前的原子至少n次,最多出现m次

三个实例,都是经典:

// 匹配非空字符
$pattern = '/.+/';//替代除\n之外所有字符,+至少要有一个或多个
$subject = '123';
$matches = [];
if(preg_match($pattern,$subject,$matches)){
var_dump($matches);
}else{
echo "空字符串";
}
//匹配手机号 (11位整数 1开头 )
$pattern = '/^1[3-8][0-9]\d{8}/';
$subject = '18845862365';
$matches = [];
if(preg_match($pattern,$subject,$matches)){
echo "正常手机号";
}else{
echo "包含非法字符";
}
//匹配邮箱 (aaaa@aa.com 123456@qq.com dfasdfa@163.com ppkpkkpkp@fadds.com adsfasd.asdfasd@com.cn)
$pattern = '/^\w+(\.\w+)*@\w+(\.\w+)$/';
$subject = '111111111@qq.com';
$matches = [];
if(preg_match($pattern, $subject,$matches)){
echo "正常邮箱";
}else{
echo "非法邮箱";
}

  • 模式修正符
    模式修正符 对整个正则有效,所以要写在正则定界符外部 例如 /\w+/i

附参考表

PHP浅谈正则_php正则匹配邮箱

PHP浅谈正则_php正则匹配手机号_02PHP浅谈正则_php正则匹配手机号_03