PHP正则表达式

mac2024-04-01  27

一、概念

正则表达式(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).点号

.表示匹配除了\n(换行符以外的任意单个字符),如果要表示真正的点号必须用\.

(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\n\r\t\v]。

2.5手机号验证

2.6用户名验证

用户名可以是数字 字母 下划线 中横线 个数是3-8位

2.7 反向引用

在正则表达式中出现小括号,是把小阔号中的内容当做子单元来使用

2.8贪婪模式

正则表达式里会尽可能多的匹配的元素

2.9 禁止贪婪模式

让正则表达式尽可能少的匹配结果 

最新回复(0)