PHP笔记05-正则表达式

【正则表达式】

  1. 正则表达式中容易混淆的术语:grep、egrep、POSIX(可移植操作系统接口)、Perl(实际抽取与汇报语言)、PCRE。
  2. 一个完整的正则表达式由两部分构成:元字符(具有特殊含义的字符,如:“?”和“*”)和文本字符(普通的文本,如:字母和数字)。

【正则表达式语法规则】

  1. 行定位符(^$,用来描述字串的边界,“^”表示行的开始,“$”表示行的结尾。
  2. 单词定界符(\b\B,其中\b表示要查找的字串为一个完整的单词,\B刚好相反,匹配的字串不能是一个完整的单词,而是其他单词或淄川的一部分。
  3. 字符类([],正则表达式区分大小写,若要忽略大小写可使用方括号表达式“[]”,一个方括号只能匹配一个字符。如匹配“tm”,则为:[Tt][Mm]。
  4. POSIX预定义字符类

PHP笔记05-正则表达式_第1张图片

  1. 选择字符(|,可以理解为“或”,可以匹配任意长度的字符。可以写成 (T|t)(M|m),也可以写成 TM|tm|Tm|tM 。    
  2. 连字符(-,表示字符的范围,如[a,b,c,d…A,B,C,D…] 可以写成 [a-zA-Z]。
  3. 排除字符([^],匹配不符合命名规则的变量。如:[^a-zA-Z],该表达式匹配不以字母和下划线开头的变量名。
  4. 限定符(?*+{n,m}

PHP笔记05-正则表达式_第2张图片

  • 点号字符(.,匹配除了换行符意外的任意一个字符。如:匹配以s开头、t结尾、中间包含一个字母的单词,格式为:^s.t$ (sat、set、sit);再如:匹配一个单词,第一个字母为r,第三个字母为s,最后一个为t,格式为:^r.s.t$
  • 反斜线(\,可以将一些不可打印的字符显示出来,还可以指定预定义字符集,还可以定义断言(如:\b、\B)。

PHP笔记05-正则表达式_第3张图片

  1. 括号字符((),可以改变限定符的作用范围。如:(thir|four)th,意思就是匹配单词thirth 和 fourth。
  2. 反向引用(\1\2…..。如:匹配连续两个it,格式为:(it)\1,又如:([a-z])([A-Z])\1\2。
  3. 模式修饰符,作用是设定模式,也就是规定正则表达式应该如何解释和应用。

模式修饰符既可以写在正则表达式的外面,也可以写在表达式内。如忽略大小写模式,可以写成/tm/I 、(?i)tm(?-i) 、(?i:tm) 三种模式。

PHP笔记05-正则表达式_第4张图片

 

【POSIX扩展正则表达式函数—— 已废除,了解下历史用法】

ereg()函数和eregi()函数——实例:使用ereg()函数验证变量是否合法。

ereg_replace()函数和eregi_replace()函数——实例:将下面所有的tm转换成大写的TM。

PHP笔记05-正则表达式_第5张图片

split()函数和spliti()函数分割字符串——实例:使用字串is来分割字符串$str。

PHP笔记05-正则表达式_第6张图片

 

【PCRE正则表达式函数】

preg_grep()函数——例:在数组中匹配具有正确格式的电话号码,并保存到另一个数组中。

PHP笔记05-正则表达式_第7张图片

preg_match()函数 preg_match_all()函数

PHP笔记05-正则表达式_第8张图片

PHP笔记05-正则表达式_第9张图片

preg_quote()函数:将字符串中所有特殊字符进行自动转义。这里特殊字符是指具有一定意义的元字符,其他如“@”、“#”等则不会被当做特殊字符处理。

实例:输出常用的特殊字符,并且将字母b也当做特殊字符输出。

PHP笔记05-正则表达式_第10张图片

preg_replace()函数。——实例:实现一个常见的UBB代码转换功能,将输入的“[b]…[/b]”、“[i]…[/i]”等类似的格式转换为html能识别的标签。

 

【正则表达式】

1.正则表达式可以指定3种基本的抽象模式:

2.正则表达式中的元字符

PHP笔记05-正则表达式_第11张图片

3.正则表达式基础:

(3.1)方括号表达式:[]

常用的方括号表达式:

PHP笔记05-正则表达式_第12张图片

(3.2)定位符: $,分别表示在字符串的开始匹配和在字符串的结尾匹配。

元字符“^”如果出现在方括号表达式里面,表示含义为:否。

(3.3)量词:也被称为“限定符”,用来指定字符必须要出现的次数。

具体包括六种:*+?{n}{n,}{n,m}

PHP笔记05-正则表达式_第13张图片

量词“?”如果出现在方括号里面时,只代表一个普通字符。

(3.4)选择符:竖线“|”可以表示选择分支。

5.Perl正则表达式——需要以分隔符作为开始和结束标识

(5.1)Perl字符簇:

PHP笔记05-正则表达式_第14张图片

 Perl正则表达式函数:preg_grep()preg_match()preg_split()preg_quote()

(5.2) preg_grep()函数:返回一个数组

PHP笔记05-正则表达式_第15张图片

PHP笔记05-正则表达式_第16张图片

(5.3)preg_match()函数:用于在字符串中查找匹配项,返回一个数组。

PHP笔记05-正则表达式_第17张图片

PHP笔记05-正则表达式_第18张图片

(5.4)preg_split()函数:使用正则表达式分割字符串,并将结果以数组的形式返回。

PHP笔记05-正则表达式_第19张图片

(5.5)preg_replace()函数:查找和替换子字符串,功能同str_replace()函数

PHP笔记05-正则表达式_第20张图片

(5.6)preg_quote()函数会在每个正则表达式的特殊字符前面加入一个转义字符,也就是反斜线“\”。其中,正则表达式的特殊字符包括:.\\+*?[^]$(){}=!<>|:

PHP笔记05-正则表达式_第21张图片

 

【正则表达式示例】:

1.PHP正则匹配一对中括号内的内容为空:

$ss = "sdfghjfsd[url]88888888888888[/url]";
$ss = preg_replace('/\[url\S*\[\/url\]/', '', $ss);
echo $ss; //输出:sdfghjfsd后面的内容

2.PHP正则匹配网页源代码中的图片路径,如果源代码中有空格,先去掉“\r”和"\n",然后再匹配。

$str=str_replace("\r", "",$content);
$str=str_replace("\n", "",$str);
$pattern="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg]))[\'|\"].*?[\/]?>/";
preg_match_all($pattern,$str,$match);
$match[1][0]就是图片的路径

PHP笔记05-正则表达式_第22张图片

3.PHP正则获取当前页面的所有超链接:

$str = '(包含超链接的字符串)'; 
//$str=file_get_contents("http://www.baidu.com/index.php");  
$pat = '/(.*?)<\/a>/i';  
preg_match_all($pat, $str, $m); 
print_r($m);  其中$m[2]为超链接内容,$m[4]为超链接的标题。

4.根据网页源代码的某个div提取需要的数字:

$Content='(页面内容)';
$pat = '/
.+?<\/div>/'; $str=str_replace("\r", "",$Content); $str=str_replace("\n", "",$str); preg_match_all($pat, $str, $res); preg_match_all('/\d+/', $res[0][0], $nums); print_r($nums[0][0]);得到结果。

5.PHP 匹配多对中括号中的内容,如下:

$string = "这是[3]def[25]我的[26]想说的话[wer3][as][41]正则匹配!";
preg_match_all('/\[([a-z0-9]+)\]/', $string, $matches);
print_r($matches);  

【代码】https://github.com/rxbook/study-php/tree/master/code05 

你可能感兴趣的:(PHP基础笔记)