PHP正则表达式
元字符在正则表达式内部具有的独特含义:
字符 |
名字 |
含义 |
^ |
补字符号 |
指示字符串的开始 |
$ |
美元符号 |
指示字符串的结尾 |
. |
句点 |
任意单个字符 |
| |
竖线 |
二中选一(或) |
用法:
'a|b':匹配包含a或b的字符串
'^a':匹配以a开头的任何字符串
'$a': 匹配以a结尾的任何字符串
'^a$':只匹配a
量词规定某个字符可以或必须出现的次数:
字符 |
含义 |
? |
0次或1次 |
* |
0次或多次 |
+ |
1次或多次 |
{x} |
正好出现x次 |
{x,y} |
在x次和y次之间(含x和y) |
{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 }