zoukankan      html  css  js  c++  java
  • 正则表达式

    一:语法基础

    完整的正则表达式由两种字符组成 特殊字符(元字符)和普通字符(文本)
    示例:
    /^d+hello.*/
    d + . * 都是元字符
    hello是普通字符

    二:元字符

    1.元字符列表

    . 除了换行以外的任意字符
    [abcde] 匹配abcde里面的任意字符
    [^abcde] 不匹配abcde里面的任意字符
    [a-h] 匹配a-h的任意字符
    w相当于[a-zA-Z0-9_]
    W相当于[^a-zA-Z0-9_]
    s匹配任何空白字符[ f v]
    S匹配任意非空白字符[^s]
    d匹配数字
    D不匹配数字
    [u4e00-u9fa5]匹配任意汉字(这里用unicode编码表示汉字)

    2.元字符-限定字符

    *匹配0-多个字符
    ?匹配0-1个元字符
    {0,}0-多个元素
    {0,1}0-1个字符
    {n}匹配n个字符
    {n,}匹配至少N个字符
    +至少匹配一个
    匹配单词边界
    ^匹配行首
    $匹配行尾

    3.说明:

    1)特殊字符转义:\,?,",比如至少一个,正则表达式匹配应为\+
    2)可以将元字符或普通字符括起来作为分组

    如何判定哪些是元字符?
    元字符转义测试

    三:进阶

    1.多选结构,正则的多种写法

    2.分组和后项引用

    3.环视(零宽断言),

    不匹配任何字符,只匹配特定的位置,类似于,^,$。环视不会占用字符
    环视分为顺序和逆序两种
    顺序(?=exp)位置的后面能匹配exp,(?!exp)位置的后面能不匹配exp
    逆序(?<=exp)位置的前面能匹配的exp,例如(?<=d)当前位置的左边是数字
    (?<!exp)位置的前面不能匹配的exp,例如(?<!d)当前位置的左边不能匹配数字

    4.贪婪和非贪婪(匹配优先与忽略优先)

    <?php
    $string = 'aaabaab';
    $pattern1 = '/a.{1,10}b/';
    $pattern2 = '/a.{1,10}?b/';
    preg_match_all($pattern1,$string,$arr1);
    preg_match_all($pattern2,$string,$arr2);
    var_dump($arr1);
    var_dump($arr2);

    四:高级

    1.正则引擎的了解
    2.回溯
    3.表达式的优化
    1)化简量词
    2)尽量不使用分组
    3)尽量不使用或a|b|c不如[abc]的效率
    4)回溯的越少,速度越快

    五:PHP与正则表达式

    1.PHP常用的模式修饰符

    1)i 大小写不敏感
    2)m 增强的行锚点模式
    3)x 空白和#注释将被忽略
    4)s 点号元字符匹配所有字符,包含换行符
    5)e 将替换后的字符串作为PHP 代码评估执行

    2.PHP中的正则使用

    PHP中的pcre库和posix库的对比
    pcre的正则分隔符可以是任意的

  • 相关阅读:
    postgresql9.1 streaming replication(热备份)
    python 中 theadLocal 的用法
    Python 17
    PYTHON学习笔记-DAY-16
    PYTHON学习笔记-DAY-15---------------------------未完待续
    PYTHON学习笔记-DAY-14
    PYTHON学习笔记-DAY-9
    PYTHON学习笔记-DAY-8
    PYTHON学习笔记-DAY-7
    PYTHON学习笔记-DAY-6
  • 原文地址:https://www.cnblogs.com/bafeiyu/p/8875217.html
Copyright © 2011-2022 走看看