第11课:正则表达式

正则表达式博大精深,是一群人工智能神经网络领域的人搞出来的。写起来好比中国的文言文,短小精悍。

正则表达式难用,但是功能强大,主要体现在对字符串的过滤提取上

常用领域:
输入参数校验
其他网站内容抓取

常用正则表达式:
代码 	说明
. 	匹配除换行符以外的任意字符
\w 	匹配字母或数字或下划线或汉字
\s 	匹配任意的空白符
\d 	匹配数字
\b 	匹配单词的开始或结束
^ 	匹配字符串的开始
$ 	匹配字符串的结束
* 	重复零次或更多次
+ 	重复一次或更多次
? 	重复零次或一次
{n} 	重复n次
{n,} 	重复n次或更多次
{n,m} 	重复n到m次

正则表达式与PHP
在PHP中与正则表达式相关的函数常用的主要有preg_match与preg_match_all
(.[\s\S]*?)用于获取两个标签之间的内容
例:
preg_match("/(\d*)月(\d*)日/",$keywords1,$match)
preg_match('/<dt>(.[\s\S]*?)<\/dt>/', $li, $url);


preg_replace函数在字符串进行正则替换用


正则表达式主要用法总结:

1.通配符(lookarounds):断言某些字符串中某些字符的存在与否!
lookarounds分两种:lookaheads(正向预查 ?=)和lookbehinds(反向预查?<=)。
> 格式:
正向预查:(?=) 相对应的 (?!)表示否定意思
反向预查:(?<=) 相对应的 (?<!)表示否定意思
前后紧跟字符
$regex = '/(?<=c)d(?=e)/';  /* d 前面紧跟c, d 后面紧跟e*/
$str = 'abcdefgk';
$matches = array();
 
if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

2.捕获数据
格式:(?:pattern)
优点:将使有效反向引用数量保持在最小,代码更加、清楚。
 
没有指明类型而进行的分组,将会被获取,供以后使用。
指明类型指的是通配符。所以只有圆括号起始位置没有问号的才能被捕捉。
在同一个表达式内的引用叫做反向引用。
调用格式: \编号(如\1)。
$regex = '/^(Chuanshanjia)[\w\s!]+\1$/';   
$str = 'Chuanshanjia thank www.godeye.org';
$matches = array();
if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}

3.惰性匹配(记住:会进行两部操作,请看下面的原理部分)
格式:限定符?
原理:"?":如果前面有限定符,会使用最小的数据。如"*"会取0个,而"+"会取1个,如过是{3,5}会取3个。
先看下面的两个代码:
<?php
$regex = '/heL*/i';
$str = 'heLLLLLLLL:www.godeye.org';
if(preg_match($regex, $str, $matches)){
    var_dump($matches);
}
结果1

4.正则表达式的注释 
格式:(?#注释内容)
用途:主要用于复杂的注释

打赏  如对你有帮助,请我喝杯咖啡吧!