首页 > 未分类 > php正则表达式入门学习总结笔记可收藏备用
2014
05-18

php正则表达式入门学习总结笔记可收藏备用

1、入门简介
简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sedshell程序等。此外,象JavaScript这种客户端的脚本语言也提供了对正则表达式的支持。由此可见,正则表达式已经超出了某种语言或某个系统的局限,成为人们广为接受的概念和功能。
正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。
举例来说,正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确。如果通过正则表达式验证用户邮件地址的格式正确,用户所填写的表单信息将会被正常处理;反之,如果用户输入的邮件地址与正则表达的模式不匹配,将会弹出提示信息,要求用户重新输入正确的邮件地址。由此可见正则表达式在WEB应用的逻辑判断中具有举足轻重的作用。


PHP常用正则函数
preg_match()
返回匹配数量,不过因为这个函数匹配依次就会停止,所有只有可能0和1两个值,刚好和bool值对应,所以0代表没有,1代表有。

preg_match_all()
用法同上,但是会一直搜索到结尾,所以返回值有可能>1。

具体使用往下看。

注:如果只想查看一个字符串是否包含另一个字符串,其实没有必要使用正则表达式,可以用strpos()或strstr()替代,这两个函数运行要快得多。

preg_match用法
方法1:
preg_match( string 正则, string 搜索的字符串);
方法2:
preg_match( string 正则, string 搜索的字符串 ,array 搜索结果);

preg_match_all用法类似
具体正则语法往下看

正则语法规则
    我们先介绍三个东西,然后可以进行简单的例子了。
一、定界符    "/" 左斜线
php采用左斜线作为定界符,规定规则的边界,成对出现,两个定界符之间的内容就是需要被匹配的规则

二、元字符---出现模式类
匹配方式,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
比如出现一次,出现多于一次,出现多次,没有出现。等等。
常用的有:
    +     1次或多次
    *     0次或1次或多次
    ?    0次或1次
  {2,6}   2-6次
   {2}    恰巧2次
   {3,}   至少3次,>=3

三、元字符---特定字符类
代表一个特定的字符
\s     空白字符(单个空格符、tab键和换行符)
\S     非空白字符
\d     数字(单个 0到9)
\w     字母,数字或下划线字符
\W     非(字母,数字或下划线字符)
 .     除换行符之外的所有字符

例子
1、查看这个字符串是否包含"smsyun"
preg_match("/smsyun/","wwwsmsyuncom");
返回1

2、判断这个网址是不是PHP学习笔记的网址
preg_match("/smsyun.com/","http://www.smsyun.com/smsyun/");
返回1

3、判断是否包含数字
preg_match("/\d/","hello");    返回0
preg_match("/\d/","hello 88");    返回1

4、判断包含1个或>1个数字
preg_match("/\d+/","smsyun8");   返回1
preg_match("/\d+/","123456789");   返回1
preg_match("/\d+/","smsyun");   返回0

5、判断是否包含 以138开头的手机号
preg_match("/138\d{8}/","13800123000");   返回1

6、判断是否有上千的数字
preg_match("/\d{4,}/","2500");     返回1
preg_match("/\d{4,}/","850");     返回0


一、定位符(不同于上面的定界符)
规定匹配模式在目标字符串出现的位置,在字符串中找到匹配的字符串还不行,还得规定找到的东西位于字符串位置。比如结尾,开头。
比如:新浪邮箱不仅要查找@sina.com,而且@sina.com必须位于目标字符串的结尾。@sina.comafafaf绝对不是新浪邮箱。
又比如:判断一个字符串是不是手机号,11位数字就是手机号么?不一定。"13800138000sb"这个字符串就不是手机,手机号必须11个数字前面没有字符,后面也没有字符才行

定位符有四个
^  出现在开头
$  出现在结尾
\b 出现在开头或结尾
\B 不能是开头 也不能是结尾

二、非操作(相反操作)
^也用这个符号,但是不要和定位符中的混乱,他们用在不同的地方。
例如下面或操作符中的第三个

三、或操作符
  x|y     或操作,匹配任何一个都可以
[xyz]     xyz中至少匹配一个
[^xyz]    xyz中不能匹配任何一个

四、范围符(在一定范围)
[ ] 一对中括号来表示
例如:
[A-Z]    大写字母
[a-z]    小写字母
[0-9]    数字
[^A-Z]    非大写字母
[^a-z]    非小写字母
[^0-9]    非数字
([a-z][A-Z][0-9])+/上述正则表达式将会与从0到9范围内任何一个数字相匹配


五、转义符号
与其他的语言雷同,特殊的字符用\右斜线进行转义
比如:
\*  代表星号
\\  代表\右斜线
\+  代表+加号



友荐云推荐