zoukankan      html  css  js  c++  java
  • 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).点号

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

    (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手机号验证

    02.png

    2.6用户名验证

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

    03.png

    2.7 反向引用

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

    04.png

    2.8贪婪模式

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

    05.png

    2.9 禁止贪婪模式

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

  • 相关阅读:
    uniapp开发注意事项
    uniapp生成海报带二维码及保存
    严格模式的this
    数据类型
    短路特性
    第九周程序改错
    矩阵转置
    二分法求根
    三天打鱼两天晒网
    LeetCode7
  • 原文地址:https://www.cnblogs.com/wjlbk/p/11783858.html
Copyright © 2011-2022 走看看