PHP正则表达式

一、概念

正则表达式(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手机号验证

02.png

2.6用户名验证

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

03.png

2.7 反向引用

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

04.png

2.8贪婪模式

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

05.png

2.9 禁止贪婪模式

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

posted @ 2019-12-20 08:29  江湖艺人  阅读(262)  评论(0编辑  收藏  举报