worker321 发表于 2017-4-4 10:57:27

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]
查看完整版本: php学习笔记(八)正则表达式