• php正则表达式基本


    一.正则表达式的组成
    
    1.分隔符,可以是除了字母,数字,反斜线及空白以外的任何字符,比如/,!,#,%,|,~等;通常有/,!,~
    
    2.表达式:由一些特殊字符和非特殊字符组成.
    
    3.修饰符:用于开启或关闭某种功能/模式
    
    二.元字符
    
    常用的元字符有以下几种
    
    .    匹配除换行符外任何字符
    w    匹配字母或数字或下划线或汉字
    s    匹配任意空白字符
    d    匹配数字
        匹配单词开始或结束
    ^    匹配字符串开始
    $    匹配字符串结束
    -    表示范围
    []    匹配括号中任意一个字符
    * + ?    量词
    
    三.字符组
    
    如果匹配没有预定义的元字符,可以使用字符组;只需要在[]内列出他们;
    如
    [aoeiou]匹配任何一个英文元音字母;
    [.?!] 匹配标点符号 . ? !
    
    ps:尽管[]号内有好多字符,但他只匹配单个字符
    
    
    四.转义
    
    如果要匹配元字符本身,比如?,直接匹配,会被当成元字符处理,这时候要使用转义;
    ?:
    ? 就可匹配字符串中含有?的字符串
    
    ps:字符组中的元字符不需要转义
    
    五.反义
    
    W    匹配除字母或数字或下划线或汉字以外
    S    匹配除任意空白字符以外
    D    匹配除数字以外
    B    匹配不是单词开始或结束的位置
    
    字符组的反义是加^
    [^abc] 匹配除了abc这几个字母以外的任意字符
    
    ps:反义的特征是和一些已知元字符相反,并且为大写形式.字符组例外
    
    六.分支
    
    | 表示分支
    
    分支就是存在多种可能的匹配情况;如要匹配cat,hat,fat,toat,就可以用分支形式
    (c|h|f|to)at
    
    ps:匹配分支条件时,从左到右测试每个条件,如果满足某个分支,就不再考虑其他条件..分组
    
    重复单个字符需要限定符即可做到,重复多个字符就需要分组;分组用小括号指定表达式,然后规定这个表达式重复的次数.
    
    
    1.捕获
    (exp)        匹配exp,并捕获文本到自动命名组里
    (?<name>exp)    匹配exp,并捕获文本到name组里
    (?:exp)        匹配exp,不捕获,也不分配组号 
    
    示例1:
    <?php
    $str = 'cat';
    preg_match_all('/(c).*/', $str, $arr);
    var_dump($arr);
    
    输出(自动命名组):
    array(2) {
      [0]=>
      array(1) {
        [0]=>
        string(3) "cat"
      }
      [1]=>
      array(1) {
        [0]=>
        string(1) "c"
      }
    }
    
    示例2:
    <?php
    $str = 'cat';
    preg_match_all('/(?<name>c).*/', $str, $arr);
    var_dump($arr);
    
    输出(多出一个test组):
    array(3) {
      [0]=>
      array(1) {
        [0]=>
        string(3) "cat"
      }
      ["test"]=>
      array(1) {
        [0]=>
        string(1) "c"
      }
      [1]=>
      array(1) {
        [0]=>
        string(1) "c"
      }
    }
    
    示例3:
    <?php
    $str = 'cat';
    preg_match_all('/(?:c).*/', $str, $arr);
    var_dump($arr);
    
    输出:
    
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(3) "cat"
      }
    }
    
    2.零宽断言(匹配的是事实,不是内容)
    (?=exp) 匹配exp前面的位置
    (?<=exp) 匹配exp后面的位置
    (?!exp) 匹配后面跟的不是exp的位置
    (?<!exp) 匹配前面跟的不是exp的位置
    
    如:
    <?php
    $str = 'testecattest';
    preg_match_all('/(?=te)/', $str, $arr);
    
    则输出:
    array(1) {
      [0]=>
      array(3) {
        [0]=>
        string(0) ""
        [1]=>
        string(0) ""
        [2]=>
        string(0) ""
      }
    }
    匹配到三处
    
    
    ps:默认情况下,每个分组拥有一个组号,规则是从左到右,以分组的左括号为标志,第一个出现在分组里的为1,第二个为2,以此类推;分组0为整个表达式..反向引用
    
    反向引用在于重复搜索前面某个分组匹配的文本.
    
    示例:
    $str = '[url]1.gif[/url]';
    $img = preg_replace('/[url](d+.gif)[/url]/', '<img src="$1" />', $str);
    echo $img;
    
    输出
    <img src="1.gif" />
    
    $1匹配了分组(d+.gif)
    
    
    九.环视(零宽断言)
    
    1.顺序肯定环视(?=exp)
    断言自身出现位置的后面能匹配表达式exp
    示例:
    <?php
    $str = 'what are you doing testing?';
    preg_match_all('/w+(?=ing)/', $str, $arr);
    var_dump($arr);
    
    匹配do和test
    
    2.逆序肯定环视(?<=exp)
    断言自身出现位置的前面能匹配表达式exp
    示例:
    <?php
    $str = 'what are you doing testing?';
    preg_match_all('/(?=ing)/', $str, $arr);
    var_dump($arr);
    
    匹配doing和testing
    
    3.顺序否定环视(?!exp)
    
    4.逆序否定环视(<!exp)
    
    
    
    
    十.常用修饰符/模式
    1. i    忽略大小写
    示例:
    <?php
    $str = 'cat test CAT';
    preg_match_all('/cat/i', $str, $arr);
    var_dump($arr);
    
    不加i修饰符,只匹配cat
    
    2. m    多行模式
    仅当表达式中出现^,$至少一个元字符且有换行符
    时,m修饰符才起作用;
    
    如:
    $str = 'cat 
    
    test
    cat';
    
    要提取cat
    
    a.不用多行模式
    preg_match_all('/cat.*/', $str, $arr);
    
    b.用多行模式
    preg_match_all('/cat.*$/m', $str, $arr);
    
    3.s    点号统配模式(.号可以匹配换行符)
    如:
    <?php
    $str = 'cat 
    t
    test
    cat
    f';
    preg_match_all('/t.*f/s', $str, $arr);
    var_dump($arr);
    
    输出:
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(19) "t 
    t
    test
    cat
    f"
      }
    }
    
    
    4.U    懒惰模式
    等效于懒惰匹配
    
    5.D    结尾限制
    等效于结尾限定符
    
    6.u    启用pcre中与perl不兼容的功能,模式字符串被当成utf-8
  • 相关阅读:
    史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)
    漫谈《大型网站技术架构》
    如何使用MongoDB+Springboot实现分布式ID?
    IOS UIView 01-View开始深入 绘制像素到屏幕上
    IOS 多线程04-GCD详解 底层并发 API
    IOS 多线程05-OperationQueue 、GCD详解
    IOS 多线程02-pthread 、 NSThread 、GCD 、NSOperationQueue、NSRunLoop
    IOS 公共类-数字处理
    React Native02-开始运行 Android篇
    React Native01-开始 Windows环境安装配置篇
  • 原文地址:https://www.cnblogs.com/itfenqing/p/7115834.html
Copyright © 2020-2023  润新知