欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PHP正则表达式

程序员文章站 2022-03-12 21:51:44
...

一、概念

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

PHP正则表达式

2.6用户名验证

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

PHP正则表达式

2.7 反向引用

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

PHP正则表达式

2.8贪婪模式

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

PHP正则表达式

2.9 禁止贪婪模式

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

相关标签: 正则表达式