PHP正则表达式

元字符在正则表达式内部具有的独特含义:

 

字符

名字

含义

^

补字符号

指示字符串的开始

$

美元符号

指示字符串的结尾

.

句点

任意单个字符

|

竖线

二中选一()

 

  用法:

        'a|b':匹配包含ab的字符串

         '^a':匹配以a开头的任何字符串

         '$a':   匹配以a结尾的任何字符串

         '^a$':只匹配a

 

量词规定某个字符可以或必须出现的次数:

 

字符

含义

?

0次或1

*

0次或多次

+

1次或多次

{x}

正好出现x

{x,y}

x次和y次之间(xy)

{x,}

至少出现x

 

类别是把字符串防止在方括号[]内创建的:

 

字符串类别是用于定义模式的更灵活的工具:

 

类别

含义

[a-z]

任意小写字母

[a-zA-Z]

任意字母

[0-9]

任意数字

[\f\r\t\n\v]

任意空白

[aeiou]

任意元音字母

[[:alnum:]]

任意字母或数字

[[:alpha:]]

任意字母

[[:blank:]]

任意制表符或空格

[[:digit:]]

任意字母

[[:lower:]]

任意小写字母

[[:upper:]]

任意大写字母

[[:punct:]]

任意符号

[[:space:]]

任意空白

 

 

匹配模式:

           PHP中构建了两个函数,它们明确用于匹配字符串内的模式,这两个函数时erge()eregi()(Perl兼容的正则表达式代之以使用preg_match())。它们的唯一区别:ereg()把模式视为区分大小写,而eregi()则不区分大小写。如果模式匹配,这两个函数都会返回true,如果不匹配,则为false

 

 

   eg

       验证电子邮件:

 

          

if(!eregi('^[[:alnum:]][a-z0-9_\.\-]*@[a-z0-9\.\-]+\.[a-z]{2,4}$',stripslashes(trim($_POST['email']))))

  

 

     验证URL

 

        

 if(!eregi('^((http|https|ftp)://)?([[:alnum:]\-\.])+(\.)([[:alnum:]]){2,4}([[:alnum:]/+=%&_\.~?\-]*)$
',stripslashes(trim($_POST['url']))))

  

 

     验证URL类别:

 

        if(!isset($_POST['url_category']) OR !is_numeric($_POST['url_category']))

 

匹配和替换模式

 

用于用稍微不同的模式或特定的文本替换:

   ereg_replace('pattern','replace','string')                 //区分大小写

   eregi_replace('pattern','replace','string')                 //不区分大小写

 

1  
2 if(eregi('^[[:alnum:]][a-z0-9_\.\-]*@[a-z0-9\.\-]+\.[a-z]{2,4}$',stripslashes(trim($_POST['email']))))
3 {
4 $email=eregi_replace('^[[:alnum:]][a-z0-9_\.\-]*@[a-z0-9\.\-]+\.[a-z]{2,4}$',<a href="mailto:\\0">Email</a>,stripslashes(trim($_POST['email'])));
5 }

  

posted @ 2011-09-08 13:46  非著名程序师  阅读(263)  评论(0编辑  收藏  举报