您的位置:首页 > 编程语言 > PHP开发

PHP正则表达式

2016-04-14 20:01 453 查看
正则表达式

处理字符串时,有很多较为复杂的字符串用普通的字符串处理函数无法干净的完成。比如说,可能需要验证一个Email地址是否合法,为此需要查看许多不容易检查的规则。这正是正则表达式的用武之地。正则表达式是功能强大而简明的字符组,其中可以包含大量的逻辑,特别值得一提的是正则表达式相当简短。

一.正则表达式语法(Perl风格)

 
Perl一直被认为是最伟大的解析语言之一,它提供了一种全面的正则表达式,即使是最复杂的字符串模式,也可以用这种正则表达式语言搜索和替换。PHP开发人员认识到,与其重新发明正则表达式,不如让PHP用户直接使用声名赫赫的Perl正则表达式语言,即Perl风格的函数。

  
匹配函数:所谓匹配,就是按照一定的规则一个一个的比较过去,preg_match()函数在字符串中搜索模式,如果存在则返回true,否则返回false。    

 
模式规则:  所谓模式,就是规则,按照这个规则去判断是否匹配。/php/  在字符串前后加上两条斜杠即可。

<?php

preg_match('/php/','php1');  

?>

然而这样的模式还不能满足实际需要,那就需要使用更规范的正则表达式。正则表达式,就是一种能刻画某种词法规则的字符串。例如:0[Xx]([0-9a-zA-Z_])+        就是一个正则表达式,[Xx]表示字符“X”或“x”任选其一;0-9表示范围0-9;a-z表示范围;()表示一个整体;+表示重复次数至少一次。因此,这个正则表达式的含义就是:以0作开头,后接X或x,再后面接上若干个(至少一个)数字、字母、下划线。如果原字符串是”0Xdkbfkbf_”,那就是匹配的。

二.正则表达式中的元素
正则表达式中包含三种元素分别为:元字符(特殊含义的字符)、量词(重复次数)、修饰符。

量词

语法

描述

+

匹配任何至少包含一个前导字符串

*

匹配任何包含零个或多个前导字符串

?

匹配任何包含零个或一个前导字符串

.

匹配任意字符串

{x}

匹配任何包含x个前导字符串

{x,y}

匹配任何包含x到y个前导字符串

{x,}

匹配任何包含至少x个前导字符串

$

匹配字符串的行尾

^

匹配字符串的行首

()

包围一个字符分组或定义个反引用,可以使用\1\2提取

 

所谓前导符,就是指在量词前面的一个字符或一个字符串整体,例如

/asp+/  前导符是p   

/0[\w]+/ 前导符是[\w],即一个数字,字母或者下划线 

/ \w ([a-z][0-9])+/   前导符是([a-z][0-9]),即由一个字母和一个数字组成的整体。

举例:

1. /[a-zA-Z]*/      匹配任何包含零个或多个字母

2. /[.]?/  匹配零个或1个任意字符

3. /[a-zA-Z]{5}/   匹配5个字母

4. /[a-zA-Z]{5,}/   匹配至少5个字母

5. /[a-zA-Z]{5,9}/    匹配5到9个字母

6. /^[a-z]+/       从行首开始匹配至少一个字母,例如  “avhchjv”就是匹配的,而  “0cvhvs”就是不匹
配的。

7. /[a-z]+$/       匹配字符串的行尾,即字符串要以至少一个字母结尾,例如  “avhchjv”就是匹配的,
而  “cvhvs0”就是不匹配的。

8. /^[a-z]+$/      行首和行尾都要匹配,例如 “feudvud”就是匹配的,而“3bfidbfk”和 

“fvyyuvds8“,”3uibfib8“ 都是不匹配的。

9. /(\w\d){1,2}/        这里()就表示分组,意思是把里面的字符看成一个整体,里面的字符都要出现, 这个
正则表达式意思就是匹配一至两个1位字母和1位数字的组合。如”v6”就是 匹配
的,”d”和”7832”都不匹配。

 

 

    元字符

语法

描述

[a-z]

匹配任何包含小写字母a-z的字符串

[A-Z]

匹配任何包含大写字母A-Z的字符串

[0-9]

匹配任何包含数字0-9的字符串

[abc]

匹配任何包含小写字母a、b、c的字符串

[^abc]

匹配任何不包含小写字母a、b、c的字符串

[a-zA-Z0-9_]

匹配任何包含a-zA-Z0-9和下划线的字符串

\w

匹配任何包含a-zA-Z0-9和下划线的字符串(同上)

\W

匹配任何没有下划线和字母数字的字符串

\d

匹配任何数字字符,和[0-9]相同

\D

匹配任何非数字字符,和[^0-9]相同

\s

匹配任何空白字符

\S

匹配任何非空白字符

\

匹配正则中的特殊字符

 

举例:

1. if(preg_match("/[0-9]/", "54344"))   echo 1;   else echo 0;

2. if(preg_match("/([\s\w])+/", "   this_we"))   echo 1;
  else echo 0;

3. $mode = '/ph\+p/';   //规则模式

   
  $string = 'ph+p';   //字符串

     
if (preg_match($mode,$string))  echo 1;   else echo 0; 

4. 匹配特殊字符,特殊字符就是正则里出现了的特殊字符,比如 $ ^ . \  ()  * +  []  ?  {}等等

  
 if(preg_match("/^[\$]$/", "\$"))    echo 1;   else echo 0;    //匹配 $要用\$

   
if(preg_match("/^[\\\\]$/", "\\"))     echo 1;   else echo 0;  //匹配反斜杠要用 \\\\

 

 

 

  修饰符

 

语法

描述

i

完成不区分大小写的搜索

x

忽略正则中的空白

A

强制从头开始匹配

 

 

举例:

1.   $mode="/php/i";

  
if(preg_match($mode, "PHP"))   echo 1; else echo 0;

2.  $mode="/php  /x";  //x表示忽略规则中的空白

   
 if(preg_match($mode, "php")) echo 1;  else echo 0;

3. <?php

     
 $mode = '/php/A';   //规则模式

    
  $string = 'phpsdfsdfphp';   //字符串

   
if (preg_match($mode,$string))   echo 1; else echo 0;

   
 ?>

 

三、常用的正则表达式

匹配中文字符的正则表达式: /[\u4e00-\u9fa5]/
匹配Email地址的正则表达式:/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/

中文、英文、数字及下划线:/^[\u4e00-\u9fa5_a-zA-Z0-9]+$/

腾讯QQ号:/[1-9][0-9]{4,}/    腾讯qq号从10000开始

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: