一、概念
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
主要是有下面几个作用:
1、注册页面判断用户输入的内容是否符合验证规则
2、从整体字符串中看是否包含指定的字符串
3、找到符合规则的字符串进行替换
二、语法规则
2.1定义规则
$reg='/自己定义的规则/';
2.2符号简介
正则表达式由普通符号和元字符组成。
普通字符如下:
‘/a/’代表你就要匹配字符a
‘/a7/’代表你就要匹配字符a7
元字符:
是具有特殊意义的符号
‘/d/’ 代表要找寻数字
2.3匹配的方法
2.3.1preg_match()
preg_match($reg,$str,[$arr]);
$reg就是自己定义的正则表达式
$str是自己要查询的字符串
$arr是匹配到的结果
如果是两个参数的情况
$str="this is daiaa num";
$reg='/a/';
//结果是1代表这个数字在字符串中存在
//结果是0代表数字在字符串中不存在
$res=preg_match($reg,$str);
var_dump($res);
如果是三个参数的情况
$str="this is daiaa num";
$reg='/a/';
//$arr返回结果是查到的字符 ['a']
$res=preg_match($reg,$str,$arr);
var_dump($arr);
详情的参数请参考如下链接 http://tool.oschina.net/uploads/apidocs/jquery/regexp.html
2.3.2preg_match_all()
preg_match()只要找到一次符合正则表达式的结果就终止了,不会再往下匹配
$str="this is num 123456";
$reg='/d/';
//$arr返回结果是查到的字符 ['1]
$res=preg_match($reg,$str,$arr);
var_dump($arr);
preg_match_all()是匹配一次成功以后不会终止,会一直匹配到完
$str="this is num 123456";
$reg='/d/';
//$arr返回结果是查到的字符 [1,2,3,4,5,6]
$res=preg_match_all($reg,$str,$arr);
var_dump($arr);
2.4详解元字符
(1)d和[0,9]
d和[0,9]是一个意思,代表123456789
(2)D和[^0,9]
D和[0,9]是一个意思,代表非123456789
特别注意的是: 在[]内的^代表非
(3)^和$
^代表以什么开头 $代表以什么结束
$str="this is num 123";
$reg='/^123$/';
//$arr返回结果是查到的字符 [1,2,3,4,5,6]
$res=preg_match_all($reg,$str,$arr);
echo '<pre>';
print_r($arr);
echo '</pre>';
结果是什么也查不到,因为上面的字符串并不是以123开头和结尾的
(4)*代表出现0次或者多次
$str="this is num 123";
$reg='/d*/';
//$arr返回结果是查到的字符 [1,2,3,4,5,6]
$res=preg_match_all($reg,$str,$arr);
echo '<pre>';
print_r($arr);
echo '</pre>';
结果是
Array
(
[0] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
[6] =>
[7] =>
[8] =>
[9] =>
[10] =>
[11] =>
[12] => 123
[13] =>
)
)
(5)+代表出现1次或者多次
zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
$str="this is num 123";
$reg='/d+/';
//$arr返回结果是查到的字符 [1,2,3,4,5,6]
$res=preg_match_all($reg,$str,$arr);
echo '<pre>';
print_r($arr);
echo '</pre>';
结果是
Array
(
[0] => Array
(
[0] => 123
)
)
(6)?代表出现0次或者1次
“do(es)?”可以匹配“does”或“does”中的“do”。?等价于{0,1}。
$str="this is num 123";
$reg='/d?/';
//$arr返回结果是查到的字符 [1,2,3,4,5,6]
$res=preg_match_all($reg,$str,$arr);
echo '<pre>';
print_r($arr);
echo '</pre>';
结果是
Array
(
[0] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
[6] =>
[7] =>
[8] =>
[9] =>
[10] =>
[11] =>
[12] => 1
[13] => 2
[14] => 3
[15] =>
)
)
(7){n}代表出现n次
{n}代表固定出现n次
“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。
$str="helloo";
$reg='/o{2}/';
//$arr返回结果是查到的字符 [1,2,3,4,5,6]
$res=preg_match_all($reg,$str,$arr);
echo '<pre>';
print_r($arr);
echo '</pre>';
结果是
Array
(
[0] => Array
(
[0] => oo
)
)
(8){n,}代表最少出现n次
{n,}代表最少出现n次,多者不限
o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。
“o{0,}”则等价于“o*”
$str="hellooo";
$reg='/o{2,}/';
//$arr返回结果是查到的字符 [1,2,3,4,5,6]
$res=preg_match_all($reg,$str,$arr);
echo '<pre>';
print_r($arr);
echo '</pre>';
结果是:
Array
(
[0] => Array
(
[0] => ooo
)
)
(9){n,m}代表最少出现n次,最多出现m次
{n,m}代表最少出现n次,最多出现m次
“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格
$str="hellooo";
$reg='/o{2,4}/';
//$arr返回结果是查到的字符 [1,2,3,4,5,6]
$res=preg_match_all($reg,$str,$arr);
echo '<pre>';
print_r($arr);
echo '</pre>';
结果是:
Array
(
[0] => Array
(
[0] => ooo
)
)
(10).点号
.表示匹配除了
(换行符以外的任意单个字符),如果要表示真正的点号必须用.
(11)x|y
$str="php web java";
$reg='/php|java/';
//$arr返回结果是查到的字符 ['php','java']
$res=preg_match_all($reg,$str,$arr);
echo '<pre>';
print_r($arr);
echo '</pre>';
结果是:
Array
(
[0] => Array
(
[0] => php
[1] => java
)
)
(12)[xyz]
[xyz]点匹配xyz中的任意一个字符
(13)[^xyz]
[^xyz]代表除了x y z以外的任意单个字符
(14)s
s匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ f
v]。
2.5手机号验证
2.6用户名验证
用户名可以是数字 字母 下划线 中横线 个数是3-8位
2.7 反向引用
在正则表达式中出现小括号,是把小阔号中的内容当做子单元来使用
2.8贪婪模式
正则表达式里会尽可能多的匹配的元素
2.9 禁止贪婪模式
让正则表达式尽可能少的匹配结果