正则表达式
来源:互联网 发布:软件危机 编辑:程序博客网 时间:2024/05/19 05:39
正则表达式中需要转义的字符(PHP中.号也可以不转义)
正则表达式一般用在以下场景中:
1. 用户提交信息验证时,比如输入的手机号或者电话号格式是否正确,是否都是数字等
2. 在网络重定向中也用得较多
例:
这里用到重定向后能够优化seo浏览器上显示的是html静态页面,但实际上在服务器端会跳转到其他的动态网页上
正则表达式中比较重要的三个概念:捕获、子表达式、反向引用
捕获:
就个人理解,所谓捕获是指正则表达式按照正则匹配的顺序匹配依次匹配,当满足匹配条件时此字符就会被捕获
举例说明:
正则表达式是:/\d\d\d\d/si
字符串是:434jkjflsd4343jfkd5678
说明一下正则表达式的意义,就是在字符串中检索四个连续的数字
比如从第一个数字字串开始434字符串匹配相应正则表达式时,其中的第一个4会首先被捕获,34也依次被捕获,但是其并不满足匹配条件,所以继续检索。当遇到4343时满足匹配条件所以这个数字字串被成功检索出来
子表达式:
子表达式就是在字串中被小括号包含的内容
举例说明/\d(\d)\d\d/si在这里第一个匹配条件并不是第一个子表达式,在匹配过程中应该只被看成匹配的条件而第二个\d被小括号抱起来了才成为真正意义的子表达式,这里说的子表达式又会跟反向引用和一种正则匹配函数联系起来
反向引用:
这个其实是跟子表达式有密切关系的,/\d(\d)\1\d/si比如这个表达式表示的含义就是第三个匹配的数字要和第二个数字形同,因为第二个数字匹配项就是这个正则表达式的第一个子表达式。也就是此正则表达式只能检索出形如3445,5779类型的数串。
下面介绍正则匹配用到的两个函数:
preg_match、preg_match_all
这里边第一个函数只保存一个匹配结果,并将结果保存到一个一维数组中
第二个函数将保存所有匹配结果,并将结果存到一个二维数组中
preg_match用法如下:
$str="abcda1234bcerf9000";
preg_match("/\d(\d)\d\d/si",$str,$arr);
echo"<pre>";
print_r($arr);
echo"</pre>";
执行结果如下:
Array
(
[0] => 1234
[1] => 2
)
也就是说/preg_match只匹配第一个目标,$arr[0]就存放匹配到得结果,$aa[1]会匹配模式中第一个子表达式的结果,$aa[n]会匹配模式中第n个子表达式的结果
而preg_match_all匹配所有目标,$arr[0]就存放匹配得到的所有结果,
//$aa[0][0]存放第一个匹配的结果,
//$aa[0][n]会存放第n+1个匹配的结果
//$arr[1][0]放入第一个匹配到得结果中的第一个子表达式的结果
//$arr[1][n]放入第n+1个匹配到得结果中的第一个子表达式的结果
举例如下
$str="abcda1234bc4554erf9000";
preg_match_all('/\d(\d)\1\d/si',$str,$arr);
echo "<pre>";
print_r($arr);
echo "</pre>";
执行结果:
Array
(
[0] => Array
(
[0] => 4554
[1] => 9000
)
[1] => Array
(
[0] => 5
[1] => 0
)
)
强调一下这里需要注意的细节:当正则表达式中用到\1等反向引用表达符时,包含表达式的应该是单引号。
元字符
分类:限定符、选择匹配符、字符匹配符、定位符等
限定符
第一种{3}某一字符出现三次
第二种{m,n}某一匹配条件出现至少m次,至多n次
比如要匹配如下字符串111111,正则表达式是1{3,4}
正则匹配遵循贪婪匹配的方式,会先匹配1111然后匹配111
+出现一次到任意多次
*0到多
?0到1
[a-z]匹配多个字符
[^a-z]
匹配非a-z的任意字符
定位符
^只有中括号中出现才表示从开头开始
转义符\
需要转移才会被查找的字符集合
字符匹配符:
选择匹配符(可并列多个选项)|
- 【正则表达式】正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- Ubuntu 14.04 安装搭建Android开发编译环境
- Cglib动态代理实例
- 动态滴加载图片
- 霍夫变换
- 通过RMAN迁移数据并升级数据库10.2.0.3->11.2.0.3【相同位数与平台版】
- 正则表达式
- Libpuzzle with PHP 图片相似度比较扩展
- struts学习笔记之(1)—基本概念
- HDU4975 A simple Gaussian elimination problem.
- Ruby中puts、p和print的区别?
- c++构造函数
- 生活管家app1 生活管家app2
- 中国大学MOOC-翁恺-C语言程序设计习题集(学习笔记)
- Linux系列 : sed 简明教程