• 正则表达式


    正则表达式

    测试网址
    http://www.rexv.org

    1.正则表达式基础语法
    完整的正则表达式由两种字符组成 特殊字符(元字符) 普通字符(文本)
    /^d+hello.*/
    ^ d + . *都是元字符
    hello是文本字符

    2.常见元字符列表
    .
    w
    s
    d
    
    ^
    $
    xxx
    xdd
    uxxx

    3.[-0-9A-Z.?] 元字符有哪些
    . ? 不是元字符 []优先级更高

    4.字符转义
    test.php 匹配 test.php

    5.$
    单引号会转义转义符
    测试:
    333333$3333333
    要匹配上面字符串中的 "$" 正则怎么写
    在PHP中用pre_match函数分别用单引号 双引号匹配上面的$

    表示式需要的规则 $
    双引号 解析字符
    单引号 只会解析反斜杠的转义字符
    单引号表示上面的字符串 \$ (四个字符中只有两个转义需要解析)
    双引号表示上面的字符串 \$ (四个字符都解析都需要转义)

    <?php
    $uids = '333333$3333333';
    $uids2 = '333333$3333333';
    $uids = preg_match_all("/\\\$/",$uids,$matchs);
    $uids2 = preg_match_all('/\\$/',$uids2,$matchs2);
    print_r($matchs);
    print_r("<br/>");
    print_r($matchs2);
    ?>
    

    6.多选结构
    Windows98|Windows2000|WindosXP 以W98 或者 W2000 或者 WXP
    ^Windows98|Windows2000|WindosXP$ 以W98开头 或者 包含Windows2000
    或者 以WindowsXP结尾 都在或的范围内
    结尾
    Windows(98|2000|XP) W98 或者 W2000 或者 WXP
    多选结构可以包括很多字符 但是不能超越括号
    开头结尾或者小括号

    7.分组与向后引用

    8.环视(零宽断言)
    实例:
    (?=jeffrey)jeff 匹配jeffrey单词中的jeff
    jeff(?=rey) 匹配jeffrey单词中的jeff
    环视为数值添加逗号
    5345678986 5345,678,986
    每三位加逗号

    分析:
    需要找到一个位置 将位置替换为 ',' 这个位置符合以下条件
    1.左边必须有数字
    2.右边的的数字是3的个数
    实例:

    $string = '5345678986';
    $pattern = '/(?<=d)(?=(d{3})+$)/';
    $replacement = ',';
    print_r(preg_replace($pattern,$replacement,$string));
    

    9.贪婪非贪婪(匹配优先和忽略优先)
    a.b aabab 匹配整个长度
    a.
    ?b aabab 匹配整个aab ab

    10.正则的引擎
    DFA NFA引擎分类

    11.回溯

    12.表达式优化

    • .与(?:.)在逻辑上相等 前者速度更快 引擎做了内部优化
    • 尽量使用非捕获的括号
    • 消除不必要的字符组 [.]与.逻辑上相等 后者更快
    • 字符组优于多选结构 [abc]优于多选结构
    • 忽略有限还是匹配优先

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

    PCRE分隔符号
    /xaxsa/

    asdas#

    都可以

  • 相关阅读:
    Paratroopers 最大流问题 dinic算法 水平有待提高
    Food Delivery 区间dp
    D
    Codeforces 1282A Temporarily unavailable
    PAT 顶级 1017 The Best Peak Shape (35分)(最长上升子序列)
    POJ 2217 Secretary(后缀数组+高度数组)
    团体程序设计天梯赛 L1-011~L1-015
    PAT顶级解题目录
    PAT顶级 1005 Programming Pattern (35分)(后缀数组+基数排序 或 字符串哈希)
    团体程序设计天梯赛 L1-006~L1-010
  • 原文地址:https://www.cnblogs.com/weizaiyes/p/8135886.html
Copyright © 2020-2023  润新知