php学习笔记(八)正则表达式
正则表达式/**
* 正则表达式
* 描述字符排列模式的一种语法规则
* 字符串的模式分割、匹配、查找、替换
*
* 1.组成字符:abc... 123...特殊字符:()?^$*
*
* 2.两种函数库,功能相似;效率有差别
* PCRE以preg_ 开头的(执行效率高一些)
* POSIX以ereg_ 开头的
*
* 3.通常定界符用//来表示;除了字母数字和\不允许作为定界符,其他的都可以
* 组成:
* 原子:
* 普通字符:英文、数字、标点、其他、(abc)、原子表:
* 转义字符:
* \d:匹配一个数字0-9;
* \D:匹配除数字以外的任何一个字符
* \w:一个字母、数字、下划线
* \W:除一个字母、数字、下划线的符合
* \s:匹配一个空白字符:\f\n\r\t\v这些字符
* \S:匹配除空白字符外的任意字符
* \oNN:八进制
* \xNN:十六进制
* 原子表:只匹配其中一个字符
*
* [^abc]取反
*
* 元字符:(有特殊功能用途的字符)
* *:0次或者多次匹配前一个原子
* +:至少匹配一次前一个原子
* ?:0次或者一次匹配前一个原子
* .:匹配除换行字符以外的任何一个字符,相当于[^\n\r]
* |:abc|efg匹配abc或者efg
* ^:匹配字符串串首的原子/^abc/必须匹配以abc开头的字符串
* $:匹配字符串串尾的原子/abc$/必须以abc结尾
* \b:匹配单词的边界/\bis\b/匹配is两边都有边界的字符例如:this is a
* \B:匹配单词边界以外的
* {m}:表示其前原子恰好出现m次
* {m,n}:表示其前的原子出现m到n次
* {m,}:至少出现m次
* ():括号中整体表示一个原子
* 模式修正字符:(i,U,s,x,m,e,D,等)
* 标记在在整个模式之外//之外;例如:/abc/i
* 可以进行组合:/abc/iUsx
* i:大小写同时匹配
* m:将字符串视为多行
* s:将字符串视为单行,换行符作为普通字符
* x:将模式中的空白忽略
* e:在preg_replace()使用;可以将替换出来的字符当做函数或者表达式来执行
* preg_replace("/\d/e","md5(MM)",$str,$limit)
* A:强制从目标字符串开头开始匹配
* D:美元的元字符匹配字符串结尾;如果有换行就无法成功
* U:匹配到最近的字符串
*
* 4.通常是按照由左到右的顺序依次执行
* 优先级
* 1.模式单元:()
* 2.重复匹配:?*+{}
* 3.边界限制:^$\b\B
* 4.模式选择:|
*
* 5.preg_的函数
* preg_match($pattern,$str,$content)
* 在str中是否存在pattern;
* 如果存在赋值到content的数组中;并返回true
* content表示整个匹配
* content表示第一个匹配的结果;/(1)(2)(3)/即(1)中匹配的内容
* preg_match_all($pattern,$str,$content)(与preg_match有区别)
* 在str中是否存在pattern;
* 如果存在赋值到content的数组中;并返回true
* content表示整个匹配
* content表示第一个匹配的结果;/(1)(2)(3)/即(1)中匹配的内容
* preg_replace($pattern,$replacment,$str,$limit)
* 第一个:模板
* 第二个:要变成的字符串(可以用\\num来代表第几个()型原子)
* 第三个:数据源
* 第四个:替换前多少个
* 参数都可以是数组形式
* preg_split($pattern,$str,$limit)
* preg_grep($pattern,$array)
* 返回一个数组,其中包括在input数组中给定的与模式匹配的单元
* preg_
* preg_
*
* 6.UBBCode转义
* => <b></b>
* preg_replace("/[.*]/","",$str,limit);
*
*/
$str = $_GET["str"];
$mode="/abc/";
//如果匹配成功,放入第三个参数
if (preg_match($mode,$str,$content)){
echo"匹配成功,匹配出来的字符串是:".$content."<br>";
}else{
echo"不匹配失败<br>";
}
$str = "date time is ".date("Y-m-d H:i a")." php<br>";
echo $str;
echo preg_replace("/(\d{4}-\d{2}-\d{2})(\d{2}:\d{2}) m/","<font color=red>\\1</font><fontcolor=green>\\2</font>", $str);
//验证分割函数
@$str = "date. time, is ".date("Y-m-d H:i a")."php<br>";
echo $arr = var_dump(preg_split("/[,.\\s]/", $str));
$arr = preg_split("/[,.\\s]/", $str);
foreach($arras$value){
echo$value."<br>";
}
//验证BBUCode
$str = "...;sdfjos";
$pattern = array(
"/\(.+?)\[\/b\]/is",
"/\(.+?)\[\/u\]/is");
$replacement = array(
"<b>\\1</b>",
"<u>\\1</u>");
echo preg_replace($pattern, $replacement, $str);
页:
[1]