zoukankan      html  css  js  c++  java
  • 精通正则表达式(第三版)—Mastering Regular Expressions,3rd Edition—读书笔记2

    1.肯定断言:必须匹配一个字符

      排除型字符组:匹配未列出字符的字符组

    2.范围表示法——列出范围内所有的字符 大多数情况下,不会影响执行速度。但是,某些实现方式不能完全优化字符组。所以,最好是有范围表示法,有可能速度更快。 [a-Z],可能存在遗漏;[a-zA-Z],可以匹配所有字母。

    3.点号:在某些软件中,可以匹配任何字符;在其他软件中,匹配处理换行符之外的任何字符。 .* :通常情况下,不能匹配换行符; [^"]* :替代

    4.字符组减法:在字符组中进行减法运算,.NET提供 [a-a]-[aeiou]:[a-z]能够匹配字符的减去[aeiou]能够匹配的字符

    5.锚点、"零长短断言":不会匹配实际的文本,而是寻找文本中的位置

    6.环视:大多实现方式,都限制了逆序环视中的表达式的长度,但是顺序环视则没有限制。有些软件支持逆序环视匹配任意长度的文本,但是可能带来严重的效率问题 逆序环视:只能匹配固定长度的文本。

      ?<!w :ok ; ?<!this|that :ok; ?<!books? :wrong,匹配文本不确定,改为 (?<!book)(?<!books) :ok;

      ?<^w+: :wrong;匹配文本不确定

    7、命名捕获:为捕获的内容命名 (?ddd)- (?ddd)- (?dddd) : 可以通过 RegexObj.Groups["Area"]来访问括号捕获的内容,

    8、某些时候正则表达式处理各种极端情形会降低收益/成本的比例。

        某些情况下,更适合的做法就是不依赖正则表达式完成全部的工作。用括号将每个字段括起来$1、$2、$3用其他程序验证。

        正则表达式不总是最优解,多数程序设计语言都提供了处理文件名的费正则表达式函数。

    9、设置锚点,可以提高正则效率。

    10、嵌套:正则表达式无法匹配任意深度的嵌套结构。但可以匹配特定深度的嵌套括号,不是任意深度的嵌套括号   [^()*(([^()]*)[^()]*)]  可以匹配  val=foo(bar(this),3.7)+2*(that-1);

    11、注意,没有匹配任何必须元素,导致任何字符都可以匹配成功   -?[0-9]*.?[0-9]*

    12、占有优先量词或固化分组,可以禁止引擎回溯到可能出问题的地方。

    ip地址正则匹配:^([01]?dd?|2[0-4]d|25[0-5].)([01]?dd?|2[0-4]d|25[0-5].){2}([01]?dd?|2[0-4]d|25[0-5]$)  

                          注意 dd? 比d?d 效率更高

    所在路径和文件名:^(.*)/[^/]*$  优于  ^(.*)/(.*)$  更加明确的表达了意图。提醒8.

    匹配引号内的字符: "(\.|[^\"])*"   或"(?>(\.|[^"])*")   或"(\.|[^"]*+")        \.  :可以包括转义字符    ;    固化分组、占有优先量词:可以禁止引擎回溯到可能出问题的地方

  • 相关阅读:
    SharePoint Framework (SPFx) 开发入门教程
    SharePoint 2013 Designer 入门教程
    SharePoint 2013 开发教程
    SharePoint 2013 入门教程
    SharePoint Online 部署SPFx Web部件
    SharePoint Online SPFx Web部件绑定数据
    SharePoint Online 创建SPFx客户端Web部件
    SharePoint Online 配置框架(SPFx)开发环境
    SharePoint Online 创建应用程序目录
    SharePoint Online 启用 IRM
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/5498005.html
Copyright © 2011-2022 走看看