一些常用的正则匹配规则

常用元字符

  • \b 正则中的特殊代码,元字符.代表着单词的开头或结尾,也就是单词的分界处,它只匹配一个位置。对于hi,him,history,high,我们需要精确查找hi这个单词,我们应该使用\bhi\b
  • . 匹配除了换行符以外的任意字符
  • * 指定*前边的内容可以连续重复使用任意次以使整个表达式得到匹配
  • .* 连在一起,表示任意数量的不包含换行的字符.例子:hi后面不远处跟着一个Lucy应该用\bhi\b.*\bLucy\b,表示先是一个单词hi,然后是任意个任意字符(但不能是换行),最后是Lucy这个单词。
  • \d 匹配一位数字(0,或1,或2,或……)
  • – 不是元字符,只匹配它本身
  • \s 匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等
  • \w 匹配字母或数字或下划线或汉字等

常用元字符汇总

代码 说明
. 匹配除换行符以外的任意字符
* 匹配*前面的内容重复任意次,可能是0次
.* 匹配任意数量的不包含换行的字符
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
\w 匹配字母或数字或下划线或汉字等
匹配它本身

字符转义

字符转义用在查找元字符本身,比如查找.或者*,为了不让它解释成别的意思,需要用\取消这些字符的特殊含义。应该使用\.或者\*.
对于要查找\本身,需要使用\\.

重复

代码 说明
* 匹配*前面的内容重复任意次(可能是0次)
+ 匹配+前面的内容重复1次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

字符类

[abcd]表示匹配abcd中的任一字符串,[.?!]匹配.或者?或者!中的一个符号。
练习:匹配几种格式的电话号码,(010)88886666,或022-22334455,或02912345678等。
答案是\(?0\d{2}[) -]?\d{8},首先是一个转义字符\(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2}),然后是)或-或空格中的一个,它出现1次或不出现(?),最后是8个数字(\d{8})。

反义

有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义:
常用的反义代码

代码 说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符

常用验证函数

1.验证手机号

function is_email($email)
{
    return strlen($email) >= 6 && preg_match("/^[\w\-\.]+@[\w\-]+(\.\w+)+$/", $email);
}

2.验证邮箱地址

function is_email($email)
{
    return strlen($email) >= 6 && preg_match("/^[\w\-\.]+@[\w\-]+(\.\w+)+$/", $email);
}

3.验证url地址

function is_url($url) {
	if (preg_match('/^http(s)?:\/\//i', $url)) {
		return true;
	} else {
		return false;
	}
}

4.验证域名

function is_domain($domain) {
	if (preg_match("/^([0-9a-z-]{1,}.)?[0-9a-z-]{2,}.([0-9a-z-]{2,}.)?[a-z]{2,}$/i", $domain)) {
		return true;
	} else {
		return false;
	}
}

5.验证邮政编码

function is_zipcode($zipcode)
{
    return preg_match("/^\d{6}$/", $zipcode);
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*