【正则表达式】
【正则表达式语法规则】
模式修饰符既可以写在正则表达式的外面,也可以写在表达式内。如忽略大小写模式,可以写成/tm/I 、(?i)tm(?-i) 、(?i:tm) 三种模式。
【POSIX扩展正则表达式函数—— 已废除,了解下历史用法】
ereg()函数和eregi()函数——实例:使用ereg()函数验证变量是否合法。
ereg_replace()函数和eregi_replace()函数——实例:将下面所有的tm转换成大写的TM。
split()函数和spliti()函数分割字符串——实例:使用字串is来分割字符串$str。
【PCRE正则表达式函数】
preg_grep()函数——例:在数组中匹配具有正确格式的电话号码,并保存到另一个数组中。
preg_match()函数 和 preg_match_all()函数。
preg_quote()函数:将字符串中所有特殊字符进行自动转义。这里特殊字符是指具有一定意义的元字符,其他如“@”、“#”等则不会被当做特殊字符处理。
实例:输出常用的特殊字符,并且将字母b也当做特殊字符输出。
preg_replace()函数。——实例:实现一个常见的UBB代码转换功能,将输入的“[b]…[/b]”、“[i]…[/i]”等类似的格式转换为html能识别的标签。
【正则表达式】
1.正则表达式可以指定3种基本的抽象模式:
2.正则表达式中的元字符:
3.正则表达式基础:
(3.1)方括号表达式:[]
常用的方括号表达式:
(3.2)定位符:^ 和 $,分别表示在字符串的开始匹配和在字符串的结尾匹配。
元字符“^”如果出现在方括号表达式里面,表示含义为:否。
(3.3)量词:也被称为“限定符”,用来指定字符必须要出现的次数。
具体包括六种:*、+、?、{n}、{n,}、{n,m}
量词“?”如果出现在方括号里面时,只代表一个普通字符。
(3.4)选择符:竖线“|”可以表示选择分支。
5.Perl正则表达式——需要以分隔符作为开始和结束标识
(5.1)Perl字符簇:
★ Perl正则表达式函数:preg_grep()、preg_match()、preg_split()、preg_quote()
(5.2) preg_grep()函数:返回一个数组
(5.3)preg_match()函数:用于在字符串中查找匹配项,返回一个数组。
(5.4)preg_split()函数:使用正则表达式分割字符串,并将结果以数组的形式返回。
(5.5)preg_replace()函数:查找和替换子字符串,功能同str_replace()函数
(5.6)preg_quote()函数会在每个正则表达式的特殊字符前面加入一个转义字符,也就是反斜线“\”。其中,正则表达式的特殊字符包括:.\\+*?[^]$(){}=!<>|:
【正则表达式示例】:
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]就是图片的路径
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