正则表达式
作用:
1,分割
2,匹配
3,查找
4,替换
一个正则表达式至少包含一个原子
正则表达式就是一个字符串
什么时候使用正则?
1,表单匹配
2,URl的重写,路由重写
3,小偷采集
如何使用正则表达PHP
PCRE库正则表达式库,大多数语言都在使用,通用
POSIX库
正则表达式的语法规则和组成部分
1,定界符
两个正斜线//,用户把需要匹配的模式放在定界符之间即可
除了字母,数字,斜线\之外的任何字符都可以作为定界符
# | !也是可以当做定界符的
2,原子
原子是正则表达式最基本的组成单元
1,普通字符作为原子 如a-z,A-Z 0-9等
2,一些特殊字符和转义后的元字符作为原子
如,索引的标点符号,但语句特殊意义的符号需要转义后才能作为原子,
如:\* \+ \. 等
3,一些非打印字符作为原子 如\f \n \r \t \v \cx
4,使用通用字符类型作为原子,如 \d \D \w \W \s \S
作用:
1,分割
2,匹配
3,查找
4,替换
一个正则表达式至少包含一个原子
正则表达式就是一个字符串
什么时候使用正则?
1,表单匹配
2,URl的重写,路由重写
3,小偷采集
如何使用正则表达PHP
PCRE库正则表达式库,大多数语言都在使用,通用
POSIX库
正则表达式的语法规则和组成部分
1,定界符
两个正斜线//,用户把需要匹配的模式放在定界符之间即可
除了字母,数字,斜线\之外的任何字符都可以作为定界符
# | !也是可以当做定界符的
2,原子
原子是正则表达式最基本的组成单元
1,普通字符作为原子 如a-z,A-Z 0-9等
2,一些特殊字符和转义后的元字符作为原子
如,索引的标点符号,但语句特殊意义的符号需要转义后才能作为原子,
如:\* \+ \. 等
3,一些非打印字符作为原子 如\f \n \r \t \v \cx
4,使用通用字符类型作为原子,如 \d \D \w \W \s \S
5, 自定义原子表([])作为原子 如'/[apj]sp/' '/[^apj]sp/'
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>正则是匹配</title>
</head>
<body>
<form action="">
<input type="text" name="zz">
<input type="submit" value="正则表达式匹配">
</form>
</body>
</html>
<?php
header("Content-type: text/html; charset=utf-8");
// $pattern="/abc/";
// //如果匹配的到返回1,匹配不到返回0
// //=======================原子===================//
// $pattern="/abc/"; //普通的原子
// $patten="/\./"; //特殊的原子需要反斜线的转义
// $pattern="/\n/"; //匹配非打印字符
// /*=============6种通用原子开始===============*/
// $pattern="/\d/"; //匹配任意一个数字
// $pattern="/\D/"; //陪陪除了数字之外的任意字符
// $pattern="/\w/"; //匹配数字,大小写字母,下划线
// $pattern="/\W/"; //匹配除了数字,字母下划线的任意字符
// $pattern="/\s/"; //匹配空白字符
// $pattern="/\S/"; //匹配除了空白符以外的任意字符
// /*=============6种通用原子结束===============*/
// /*=============15种元字符开始===============*/
//$pattern="/go*gle/"; //*代表匹配前面的原子0次,1次或者多次
//$pattern="/go+gle/"; //+代表匹配前面的原则至少一次或者多次
//$pattern="/go?gle/"; //?智能匹配前面的原子0次或1次
//$pattern="/./"; //.匹配除了换行符以外的任意一个字符
//$pattern="/a|b/"; //或者匹配,匹配a或者b
//$pattern="/go{3}gle/"; //{n}匹配n次,可以匹配前面的n次原子,例如gooole可以匹配,如果goooogle是不能匹配的
//$pattern="/go{3,}gle/"; //{n,}可以匹配上面的原子大于n的
//$pattern="/go{1,3}gle/"; //{n,}可以匹配上面的原子大于n的
//$pattern="/^我们是好人/"; //^符号必须是从头开始,否则全文有也是输出错误,不加^的话默认是全文匹配,
//$pattern="/我们是好人$/"; //$ 必须以我们是好人结尾
//$pattern="/^我们是好人$/"; //开头^和$结尾,必须是全部匹配,原子相等
//$pattern="/^我们是.*好人$/"; //开头^和$结尾,中间可以是任意的字符
//$pattern="/\bis/"; // \b是必须以每个单词是is开头
//$pattern="/is\b/"; //必须是以is结尾
//$pattern="/\bis\b/"; //必须是以is开头和结尾
//$pattern="/\Bis/"; //is必须不能开头
//$pattern="/is\B/"; //不能以is结尾
//$pattern="/[abc]/"; //相当于a或b或c,用户输入a或b或c都可以匹配
//$pattern="/[^abc]/"; //除了a,b,c都可以匹配
//$pattern="/ab|cd/"; //可以匹配ab或者cd,相当于|
//$pattern="/ab|cd:/"; //可以匹配到ab或者cd:
//$pattern="/(ab|cd):/"; //可以匹配到ab:或者是cd: ,后向引用或者反向引用
//$pattern="/<b>.*</b>/"; //匹配所有的<b>所有的内容</b>,这是贪婪模式
// 贪婪模式,第一个<b>到最后一个</b>的所有内容,包含<b>之间的所有的<b></b></b>
//$pattern="/<b>.*?<\/b>/"; //.*?取消贪婪模式,输出第一个<b></b>标签之间的内容
// $str="<b>hao</b>are you<b></b>";
//$pattern="/[.]/"; //单纯的.没有其他含义
//$pattern="/[.*]/"; //里面的.*等特殊字符会失去原有的意义,只要是带有.或*的字符串都可以匹配成功
//匹配中文 $pattern="/[^x00-xff]/";
// /*=============15种元字符结束===============*/
// /*=============模式修正符===============*/
// $pattern="/[a-z]/i";//可以匹配a-z的大小写都可以
//$pattern="/ab/i";//可以匹配ab的大小写都可以
//$pattern="/^ab/m"; //可以在每一行开始匹配,是否ab开头,^是以什么开头,多行匹配
//类似$str="a\nb";
//$pattern="/./s";//.匹配除了换行符以外的任意一个字符,s是修正了.的换行符
//$pattern="/a b c/x";// 模式中的空白忽略不计,除非他已经转义,输入abc是可以匹配成功的,但是a b c匹配不成功
//在正则表达式中最后添加e,e是eval()的缩写
//$pattern="/<b>.*?<\/b>/u" //U是贪婪模式,备注:.*?+U是取消取消贪婪模式=贪婪模式
//$pattern="/abc$/";//默认情况下,是匹配以abc结尾的字符串,但是如果
//$str="dwedwedewabc\n";这样也是会匹配成功的,因为\n是换行符
//$pattern="/abc$/D"; 加D是更加严谨,换行的话直接报错的
// /*=============模式修正符结束===============*/
// /*=============正则式优化方面===============*/
//例如: ?:http|https|ftp 这样的话在生成的数组会没有这一项
// 减少内存占用
//
//在字符串中运行php代码:
//在正则表达式中最后添加e,e是eval()的缩写
//例如$pattern="/http:\/\/\w+\.\w+\.(com|cn)/e";
//然后在preg_replace()中更改
//$str=preg_replace($pattern,'\'<a href="$0">\'.strtoupper("$0").\'</a>\'', $str);
//上面的示例是将需要替换的值自动变成大写
// /*=============正则式优化方面结束============*/
/**************preg_match函数开始*******/
//preg_match($pattern,$str,$arr);//执行一次返回一次匹配结果
//需要遍历出结果
/**************preg_match函数结束*******/
/**************preg_match_all函数开始*******/
//preg_match_all($pattern,$str,$arr);//返回一个数组
//可以将全部的匹配结果匹配出来
//如果这是打印var_dump($arr)会输出匹配后的数组
//如果这是打印var_dump($arr[0])会输出匹配后的内容
/**************preg_match_all函数结束*******/
/**************preg_replace函数开始,推荐使用,重要!!*******/
//preg_replace($pattern,'替换内容',$arr); //返回直接替换后字符串
//(反向)后向引用就是将之前查询出的内容在preg_replace()的第二个函数直接引用
//因为第二个函数加载替换内容,可以直接放入$0或者\\0
//$0和\\0是根据正则式匹配前置出来的内容
//$0和\\0其实是数组,可以自己打印一下
/**************preg_replace结束******************************/
//另外的正则函数
//preg_grep
//preg_split
$str=$_GET['zz']; //测试接收
if(preg_match($pattern,$str,$arr)){
echo "<font color='green'>恭喜你,匹配成功</font><br/>";
echo "<pre>";
var_dump($arr);
echo "</pre>";
}else{
echo "<font color='red'>没有匹配到</font>";
}