程序员人生 网站导航

php正则表达式的介绍

栏目:php教程时间:2013-10-05 15:36:36

今天看一个教程中有写了一些正则表达式用法,里面主要讲到了正则对字符的分割、匹配、查找、替换及一些入门知识与常用实例,所以整理过来与大家分享。

1.正则表达式的介绍和作用。

01.什么是正则表达式?

正则表达式(英语:Regular Expression、regex或regexp,缩写为RE),也译为正规表示法、常规表示法,在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。

规则语法

02.主要作用:分割、匹配、查找、替换。

表达式 匹配

/^s*$/  匹配空行。

/d{2}-d{5}/  验证由两位数字、一个连字符再加 5 位数字组成的 ID 号。

/<s*(S+)(s[^>]*)?>[sS]*<s*/1s*>/  匹配 HTML 标记。

2.PHP中两个常用的正则函数。

preg_match 正则函数,以perl预言为基础。(比较效率,需要自定义一个开始结束符。)

ereg 正则函数,以POSIX为基础(Uniox、Script)。

3.正则表达式中包括的元素。

01.原子(普通字符:a-z A-Z 0-9、原子表、转义字符)。

02.原子符(有特殊功能的字符)。

03.模式修正符(系统内置部分模块,类似函数)。

4.正则表达式中的“原子”.

01.a-z A-Z _ 0-9   //最常见的字符。

02.(abc) (skd)   //用括号包含起来的单元符号。

03.[abcs] [^abd]   //贪婪匹配,用方括号包含的源自表,原子表中^代表排除或者相反内容。

04.转义字符(区分大小写)

d 包含所有数字 == [0-9]。

D 非包含所有数字 == [^0-9]。

w 包含所有英文字符 == [a-zA-Z_0-9]。

W 非包含所有英文字符&数字,用来匹配特殊符号 == [^a-zA-Z_0-9]。

s 包含空白区域如回车、换行、分页符 == [fnr]。

元字符

*  匹配前一个内容的0次1次或多次

.  匹配内容的0次1次或多次,但不包含回车换行

+ 匹配前一个内容的1次或多次

?匹配前一个内容的0次或1次

|  选择匹配类似PHP中的| (因为这个运算符合是弱类型导致前面最为整体匹配)

^  匹配字符串首部内容

$  匹配字符串尾部内容

b 匹配单词边界,边界可以是空格或者特殊符合

B 匹配除带单词边界意外内容

{m} 匹配前一个内容的重复次数为M次

{m,} 匹配前一个内容的重复次数大于等于M次

{m,n} 匹配前一个内容的重复次数M次到N次

( ) 合并整体匹配,并放入内存,可使用1 2…依次获取

实例代码如下:

  1. <?php 
  2. $mode = "#test#";   //这里可以用以上原子表进行匹配。 
  3. $str = "sdfsstestdf"
  4. if (preg_match($mode$str$end)) {   //mode正则模块、str正则内容、end正则结果,以数组输出。 
  5.  echo "匹配成功" . $end[0]; 
  6. else { 
  7.  echo "匹配失败"
  8. ?> 

常用正则

* 1、 ^S+[a-z A-Z]$ 不能为空 不能有空格 只能是英文字母

* 2、 S{6,} 不能为空 六位以上

* 3、 ^d+$ 不能有空格 不能非数字

* 4、 (.*)(.jpg|.bmp)$ 只能是jpg和bmp格式

* 5、 ^d{4}-d{1,2}-d{1,2}$ 只能是2004-10-22格式

* 6、 ^0$ 至少选一项

* 7、 ^0{2,}$ 至少选两项

* 8、 ^[s|S]{20,}$ 不能为空 二十字以上

* 9、 ^+?[a-z0-9](([-+.]|[_]+)?[a-z0-9]+)*@([a-z0-9]+(.|-))+[a-z]{2,6}$邮件

* 10、 w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*([,;]s*w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*)* 输入多个地址用逗号或空格分隔邮件

* 11、 ^(([0-9]+))?[0-9]{7,8}$电话号码7位或8位或前面有区号例如(022)87341628

* 12、 ^[a-z A-Z 0-9 _]+@[a-z A-Z 0-9 _]+(.[a-z A-Z 0-9 _]+)+(,[a-z A-Z 0-9 _]+@[a-z A-Z

0-9 _]+(.[a-z A-Z 0-9 _]+)+)*$

* 只能是字母、数字、下划线;必须有@和.同时格式要规范 邮件

* 13 ^w+@w+(.w+)+(,w+@w+(.w+)+)*$上面表达式也可以写成这样子,更精练。

14 ^w+((-w+)|(.w+))*@w+((.|-)w+)*.w+$ [/size]

匹配中文字符的正则表达式: [u4e00-u9fa5]

匹配特定数字:

^[1-9]d*$    //匹配正整数

^-[1-9]d*$   //匹配负整数

^-?[1-9]d*$   //匹配整数

^[1-9]d* |0$  //匹配非负整数(正整数 + 0)

^-[1-9]d* |0$   //匹配非正整数(负整数 + 0)

^[1-9]d*.d* |0.d*[1-9]d*$   //匹配正浮点数

^-([1-9]d*.d* |0.d*[1-9]d*)$  //匹配负浮点数

^-?([1-9]d*.d* |0.d*[1-9]d* |0?.0+ |0)$  //匹配浮点数

^[1-9]d*.d* |0.d*[1-9]d* |0?.0+ |0$   //匹配非负浮点数(正浮点数 + 0)

^(-([1-9]d*.d* |0.d*[1-9]d*)) |0?.0+ |0$  //匹配非正浮点数(负浮点数 + 0)

由字母a~z(不区分大小写)、数字0~9、减号或下划线组成 

只能以数字或字母开头和结尾 用户名长度为4~18个字符

实例代码如下:

^[a-za-z0-9]{1}[a-za-z0-9|-|_]{2-16}[a-za-z0-9]{1}$

用户名为大写字母小写字母或下划线,并以字母开头,长度为6-20

实例代码如下:

^[a-za-z][wd_]{5,19}

用户名:包括英文小写、汉字、数字、下划线,不能全部是数字,下划线不能在末尾

实例代码如下:

/^[a-z0-9_u4e00-u9fa5]+[^_]$/g

utf-8下

preg_match("/^[a-z0-9_x80-xff]+[^_]$/g",$a);

gbk下:

preg_match("/^[a-z0-9_".chr(0xa1)."-".chr(0xff)."]+[^_]$/",$a)

邮箱,实例代码如下:

  1. <?php 
  2. function is_email($email){ 
  3. return strlen($email) > 6 && preg_match(“/^[w-.]+@[w-]+(.w+)+$/“, $email); 
  4. ?> 

url地址,实例代码如下:

  1. <?php 
  2. function autolink($foo)  
  3. {  
  4. $foo = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_/+.~#?&//=]+)''<a href="/1" mce_href="/1" target=_blank rel=nofollow>/1</a>'$foo);  
  5. ifstrpos($foo"http") === FALSE ){  
  6. $foo = eregi_replace('(www.[-a-zA-Z0-9@:%_/+.~#?&//=]+)''<a href="http:///1" mce_href="http:///1" target=_blank rel=nofollow >/1</a>'$foo);  
  7. }else{  
  8. $foo = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_/+.~#?&//=]+)''/1<a href="http:///2" mce_href="http:///2" target=_blank rel=nofollow >/2</a>'$foo);  
  9. }  
  10. return $foo;  
  11. ?> 
------分隔线----------------------------
------分隔线----------------------------

最新技术推荐