正则指引 PDF 完整高清版

  • 更新时间:
  • 1699人关注
  • 点击下载

给大家带来的一篇关于正则表达式相关的电子书资源,介绍了关于正则指引、正则表达式方面的内容,本书是由电子工业出版社出版,格式为PDF,资源大小32.09MB,余晟编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:7.8分。

资源详情相关推荐
正则指引
  • 出版社:电子工业出版社
  • 作者:余晟
  • 大小:32.09MB
  • 类别:正则表达式
  • 热度:359
  • 正则表达式经典实例
  • 神奇的匹配:正则表达式求精之旅
  • JavaScript正则表达式迷你书 v1.1
  • Python正则表达式全套笔记(含Python3.10官方文档)
  • 正则表达式必知必会
  • 书籍介绍

    本书针对作者在开发中遇到的实际问题,以及其他开发人员咨询的问题,总结出一套使用正则表达式解题的办法,并通过具体的例子指导读者拆解、分析问题。全书分为三大部分:第一部分主要讲解正则表达式的基础知识,涵盖了常见正则表达式中的各种功能和结构;第二部分主要讲解关于正则表达式的更深入的知识,详细探讨了编码问题、匹配原理、解题思路;第三部分将之前介绍的各种知识落实到6种常用语言.NET、Java、JavaScript、PHP、Python、Ruby中,不但详细介绍了语言中正则表达式的用法,更点明了版本之间的细微差异,既可以作为专门学习的教材,也可以作为有用的参考手册。本书适合经常需要进行文本处理(比如日志分析或网络运维)的技术人员、熟悉常用开发语言的程序员,以及已经对正则表达式有一定了解的读者阅读。

    目录

    • 第 一 部 分
    • 第1章 字符组 2
    • 1.1 普通字符组 2
    • 1.2 关于Python的基础知识 4
    • 1.3 普通字符组(续) 6
    • 1.4 元字符与转义 8
    • 1.5 排除型字符组 10
    • 1.6 字符组简记法 12
    • 1.7 字符组运算 14
    • 1.8 POSIX字符组 15
    • 第2章 量词 17
    • 2.1 一般形式 17
    • 2.2 常用量词 18
    • 2.3 数据提取 21
    • 2.4 点号 23
    • 2.5 滥用点号的问题 23
    • 2.6 忽略优先量词 26
    • 2.7 转义 31
    • 第3章 括号 33
    • 3.1 分组 33
    • 3.2 多选结构 39
    • 3.3 引用分组 44
    • 3.3.1 反向引用 48
    • 3.3.2 各种引用的记法 50
    • 3.3.3 命名分组 53
    • 3.4 非捕获分组 54
    • 3.5 补充 55
    • 3.5.1 转义 55
    • 3.5.2 URL Rewrite 56
    • 3.5.3 一个例子 58
    • 第4章 断言 59
    • 4.1 单词边界 59
    • 4.2 行起始/结束位置 61
    • 4.3 环视 68
    • 4.4 补充 74
    • 4.4.1 环视的价值 74
    • 4.4.2 环视与分组编号 74
    • 4.4.3 环视的支持程度 75
    • 4.4.4 环视的组合 77
    • 4.4.5 断言和反向引用之间的关系 79
    • 第5章 匹配模式 81
    • 5.1 不区分大小写模式 81
    • 5.1.1 模式的指定方式 82
    • 5.2 单行模式 84
    • 5.3 多行模式 85
    • 5.4 注释模式 87
    • 5.5 补充 88
    • 5.5.1 更多的模式 88
    • 5.5.2 修饰符的作用范围 89
    • 5.5.3 失效修饰符 90
    • 5.5.4 模式与反向引用 90
    • 5.5.5 冲突策略 91
    • 5.5.6 哪种方式更好 92
    • 第6章 其他 93
    • 6.1 转义 93
    • 6.1.1 字符串转义与正则转义 93
    • 6.1.2 元字符的转义 97
    • 6.1.3 彻底消除元字符的特殊含义 99
    • 6.1.4 字符组中的转义 101
    • 6.2 正则表达式的处理形式 101
    • 6.2.1 函数式处理 102
    • 6.2.2 面向对象式处理 102
    • 6.2.3 比较 103
    • 6.2.4 线程安全性 104
    • 6.3 表达式中的优先级 106第 二 部 分
    • 第7章 Unicode 110
    • 7.1 关于编码 110
    • 7.2 推荐使用Unicode编码 111
    • 7.3 Unicode匹配规则 115
    • 7.4 单词边界 117
    • 7.5 码值 119
    • 7.6 Unicode属性 121
    • 7.6.1 Unicode Property 121
    • 7.6.2 Unicode Block 122
    • 7.6.3 Unicode Script 123
    • 7.7 Unicode属性列表 123
    • 7.7.1 Unicode Property 123
    • 7.7.2 Unicode Block 125
    • 7.7.3 Unicode Script 128
    • 7.8 POSIX字符组 129
    • 第8章 匹配原理 130
    • 8.1 有穷自动机 130
    • 8.2 正则表达式的匹配过程 131
    • 8.3 回溯 134
    • 8.4 NFA和DFA 136
    • 第9章 常见问题的解决思路 138
    • 9.1 关于元素的三种逻辑 138
    • 9.1.1 必须出现 139
    • 9.1.2 可能出现 139
    • 9.1.3 不能出现 140
    • 9.2 正则表达式的常见操作 142
    • 9.2.1 提取 142
    • 9.2.2 验证 148
    • 9.2.3 替换 152
    • 9.2.4 切分 157
    • 9.3 正则表达式的优化建议 159
    • 9.3.1 使用缓存 159
    • 9.3.2 尽量准确地表达意图 160
    • 9.3.3 避免重复匹配 160
    • 9.3.4 独立出文本和锚点 161
    • 9.4 别过分依赖正则表达式 162
    • 9.4.1 彻底放弃字符串操作 162
    • 9.4.2 思维定势 163
    • 9.4.3 正则表达式可以匹配各种文本 164第 三 部 分
    • 第10章 .NET 168
    • 10.1 预备知识 168
    • 10.2 正则功能详解 169
    • 10.2.1 列表 169
    • 10.2.2 字符组 170
    • 10.2.3 Unicode属性 170
    • 10.2.4 字符组简记法 171
    • 10.2.5 单词边界 171
    • 10.2.6 行起始/结束位置 172
    • 10.2.7 环视 173
    • 10.2.8 匹配模式 173
    • 10.2.9 捕获分组的引用 174
    • 10.3 正则API简介 175
    • 10.3.1 Regex 175
    • 10.3.2 Match 179
    • 10.4 常用操作示例 180
    • 10.4.1 验证 180
    • 10.4.2 提取 180
    • 10.4.3 替换 181
    • 10.4.4 切分 182
    • 第11章 Java 183
    • 11.1 预备知识 183
    • 11.2 正则功能详解 184
    • 11.2.1 列表 184
    • 11.2.2 字符组 184
    • 11.2.3 Unicode属性 186
    • 11.2.4 字符组简记法 186
    • 11.2.5 单词边界 186
    • 11.2.6 行起始/结束位置 187
    • 11.2.7 环视 188
    • 11.2.8 匹配模式 188
    • 11.2.9 纯文本模式 189
    • 11.2.10 捕获分组的引用 189
    • 11.3 正则API简介 189
    • 11.3.1 Pattern 190
    • 11.3.2 Matcher 192
    • 11.3.3 String 194
    • 11.4 常用操作示例 195
    • 11.4.1 验证 195
    • 11.4.2 提取 196
    • 11.4.3 替换 196
    • 11.4.4 切分 197
    • 第12章 JavaScript 198
    • 12.1 预备知识 198
    • 12.2 正则功能详解 199
    • 12.2.1 列表 199
    • 12.2.2 字符组 199
    • 12.2.3 字符组简记法 200
    • 12.2.4 单词边界 200
    • 12.2.5 行起始/结束位置 201
    • 12.2.6 环视 201
    • 12.2.7 匹配模式 202
    • 12.2.8 捕获分组的引用 203
    • 12.3 正则API简介 203
    • 12.3.1 RegExp 203
    • 12.3.2 String 207
    • 12.4 常用操作示例 210
    • 12.4.1 验证 210
    • 12.4.2 提取 210
    • 12.4.3 替换 211
    • 12.4.4 切分 211
    • 12.5 关于ActionScript 211
    • 12.5.1 RegExp 211
    • 12.5.2 匹配规则 212
    • 12.5.3 匹配模式 212
    • 12.5.4 正则API 212
    • 第13章 PHP 213
    • 13.1 预备知识 213
    • 13.2 正则功能详解 215
    • 13.2.1 列表 215
    • 13.2.2 字符组 216
    • 13.2.3 Unicode属性 217
    • 13.2.4 字符组简记法 217
    • 13.2.5 单词边界 217
    • 13.2.6 行起始/结束位置 218
    • 13.2.7 环视 219
    • 13.2.8 匹配模式 219
    • 13.2.9 纯文本模式 220
    • 13.2.10 捕获分组的引用 220
    • 13.3 正则API简介 221
    • 13.3.1 PREG 常量说明 221
    • 13.3.2 preg_quote 222
    • 13.3.3 preg_ grep 223
    • 13.3.4 preg_match 223
    • 13.3.5 preg_match_all 225
    • 13.3.6 preg_ last_ error 227
    • 13.3.7 preg_replace 227
    • 13.3.8 preg_ replace_ callback 227
    • 13.3.9 preg_ filter 228
    • 13.3.10 preg_ split 229
    • 13.4 常见的正则操作举例 230
    • 13.4.1 验证 230
    • 13.4.2 提取 230
    • 13.4.3 替换 231
    • 13.4.4 切分 232
    • 第14章 Python 233
    • 14.1 预备知识 233
    • 14.2 正则功能详解 234
    • 14.2.1 列表 234
    • 14.2.2 字符组 235
    • 14.2.3 Unicode属性 236
    • 14.2.4 字符组简记法 236
    • 14.2.5 单词边界 238
    • 14.2.6 行起始/结束位置 239
    • 14.2.7 环视 239
    • 14.2.8 匹配模式 240
    • 14.2.9 捕获分组的引用 240
    • 14.3 正则API简介 241
    • 14.3.1 RegexObject 241
    • 14.3.2 re.compile(regex[, flags]) 243
    • 14.3.3 re.search(pattern, string[, flags]) 243
    • 14.3.4 MatchObject 243
    • 14.3.5 re.match(pattern, string[, flags]) 244
    • 14.3.6 re.findall(pattern, sting[, flags]) 245
    • 14.3.7 re.finditer(pattern, string[, flags]) 245
    • 14.3.8 re.split(pattern, string[, maxsplit=0,flags=0]) 246
    • 14.3.9 re.sub(pattern, repl, string[, count,flags]) 247
    • 14.4 常用操作示例 248
    • 14.4.1 验证 248
    • 14.4.2 提取 248
    • 14.4.3 替换 249
    • 14.4.4 切分 250
    • 第15章 Ruby 251
    • 15.1 预备知识 251
    • 15.2 正则功能详解 252
    • 15.2.1 列表 252
    • 15.2.2 字符组 252
    • 15.2.3 Unicode属性 253
    • 15.2.4 字符组简记法 254
    • 15.2.5 单词边界 254
    • 15.2.6 行起始/结束位置 255
    • 15.2.7 环视 256
    • 15.2.8 匹配模式 256
    • 15.2.9 捕获分组的引用 257
    • 15.3 正则API简介 257
    • 15.3.1 Regexp 257
    • 15.3.2 Regexp.match(text) 259
    • 15.3.3 Regexp.quote(text)和Regexp.escape(text) 260
    • 15.3.4 String.index(Regexp) 261
    • 15.3.5 String.scan(Regexp) 261
    • 15.3.6 String.slice(Regexp) 262
    • 15.3.7 String.split(Regexp) 262
    • 15.3.8 String.sub(Regexp, Str) 263
    • 15.3.9 String.gsub(Regexp, String) 264
    • 15.4 常用操作示例 264
    • 15.4.1 验证 264
    • 15.4.2 提取 265
    • 15.4.3 替换 265
    • 15.4.4 切分 265
    • 15.5 Ruby 1.9的新变化 266
    • 第16章 Linux/UNIX 268
    • 16.1 POSIX 268
    • 16.1.1 POSIX规范 268
    • 16.1.2 POSIX字符组 269
    • 16.2 vi 271
    • 16.2.1 字符组及简记法 271
    • 16.2.2 量词 272
    • 16.2.3 多选结构和捕获分组 272
    • 16.2.4 环视 273
    • 16.2.5 锚点和单词边界 273
    • 16.2.6 替换操作的特殊字符 274
    • 16.2.7 replacement中的特殊变量 276
    • 16.2.8 补充 276
    • 16.3 grep 277
    • 16.3.1 基本用法 277
    • 16.3.2 字符组 277
    • 16.3.3 锚点和单词边界 278
    • 16.3.4 量词 278
    • 16.3.5 多选结构和捕获分组 279
    • 16.3.6 options 279
    • 16.3.7 egrep和fgrep 280
    • 16.3.8 补充 280
    • 16.4 awk 281
    • 16.4.1 基本用法 281
    • 16.4.2 字符组及简记法 282
    • 16.4.3 锚点和单词边界 283
    • 16.4.4 量词 283
    • 16.4.5 多选结构 284
    • 16.4.6 补充 284
    • 16.5 sed 284
    • 16.5.1 基本用法 284
    • 16.5.2 字符组及简记法 285
    • 16.5.3 锚点和单词边界 285
    • 16.5.4 量词 286
    • 16.5.5 多选结构和捕获分组 286
    • 16.5.6 options 286
    • 16.5.7 补充 287
    • 16.6 总结 288
    • 附录A 常用语言中正则特性一览 291
    • 附录B 常用的正则表达式 293
    • 附录C 常用的正则表达式工具及资源 309
       
    精选笔记:Java正则表达式匹配不到结果的解决

    16小时17分钟前回答

    如下所示:

    String str = "\uFEFF<?xml version=\"1.0\" encoding=\"utf-8\"?><Response xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><Header ShouldRecordPerformanceTime=\"false\" Timestamp=\"2018-6-25 21:24:03\" RequestID=\"2c4d0b24-fd48-4a92-a2d8-c66793df2059\" ResultCode=\"Success\" AssemblyVersion=\"2.9.5.0\" RequestBodySize=\"0\" SerializeMode=\"Xml\" RouteStep=\"1\" Environment=\"pro\" /><SSPATResponse><Result>0</Result><FareDetail /><Price>0</Price><ErrCode>102</ErrCode><DetailInfo>Send:APPLOCK\n" +
        "Rev:\n" +
        "可用资源锁定成功, 60 秒内没有输入指令资源将被Buk收回\n" +
        "Send:IG\n" +
        "Rev:\n" +
        "NO PNR\n" +
        "Send:\n" +
        "SS:AA186/N/27JUN18/PEKORD/NN1;\n" +
        "Rev:\n" +
        "AA 186 N 27JUN PEKORD NN1 WL OPEN \n" +
        "UNABLE TO SELL.PLEASE CHECK THE AVAILABILITY WITH \"AV\" AGAIN\n" +
        "Send:IG\n" +
        "Rev:</DetailInfo><PatOfficeno>SHA717</PatOfficeno></SSPATResponse><ResponseStatus><Timestamp xmlns=\"http://soa.ctrip.com/common/types/v1\">2018-06-25T21:24:03.4535624+08:00</Timestamp><Ack xmlns=\"http://soa.ctrip.com/common/types/v1\">Success</Ack></ResponseStatus></Response>";
     
    String regex = "<DetailInfo>((.|\\n")*?)</DetailInfo>";

    str为要匹配的字符串(是传入的),regex为正则表达式

    目的是匹配出<DetailInfo>标签中的内容

    在本地测试时可以匹配出来,但是在线上就不行。

    真的是百思不得其解……

    后来认真比对了一下线上传入的str和本地复制过来的str,发现了了一个微小的不同

    线上传入的str行分隔符是\r\n,而复制粘贴到本地之后都变成了\n

    而我的正则表达式中只匹配了\n的情况,因此出现这样的bug

    提醒自己要注意系统之间的差别,win上的行分隔符是\n,而Linux是\r\n

    为了能适配所有的环境,可以直接用System.lineSeparator()来替代,当然也可以把表达式写成这样(

    <DetailInfo>((.|\\n|\\r\\n")*?)</DetailInfo>

    补充:Java正则表达式匹配的坑

    今天在判断字符串是否存在某个字符串,直接用String.matches(regex),死活匹配不出来,在线正则工具用了很多都是可以的,后面找到问题,总结一下,防止再次踩坑。

    一、前提#

    java中判断一段字符串中是否包含某个字符串的方式:

    1、#

    String.matches(regex);

    阅读源码发现,这个方法本质是调用了Pattern.matches(regex, str),而该方法调Pattern.compile(regex).matcher(input).matches()方法,而Matcher.matches()方法试图将整个区域与模式匹配,如果匹配成功,则可以通过开始、结束和组方法获得更多信息。

    即这个方法会在表达式前后加上$(regex$),是对这个字符串全匹配

    而不会只匹配其中的子串,如果只想匹配子串,则需要表达式匹配整段

    2、#

    Pattern.compile(regex).matcher(str).find()

    Matcher.find()方法则是仅仅进行匹配字串的方法

    如果不想使用全局匹配则可以使用Matcher.find()方法

    二、附源码#

    1、String.matches(regex)#

    String.matches(regex)

    public boolean matches(String regex) {
        return Pattern.matches(regex, this);
    }
    Pattern.matches(regex, this)
    public static boolean matches(String regex, CharSequence input) {
      Pattern p = Pattern.compile(regex);
      Matcher m = p.matcher(input);
      return m.matches();
    }

    2、Matcher.find()#

    Pattern.compile

    public static Pattern compile(String regex) {
        return new Pattern(regex, 0);
    }
    Pattern.matcher
    public Matcher matcher(CharSequence input) {
        if (!compiled) {
          synchronized(this) {
            if (!compiled)
              compile();
          }
        }
        Matcher m = new Matcher(this, input);
        return m;
    }

    Matcher.find()

    public boolean find() {
        int nextSearchIndex = last;
        if (nextSearchIndex == first)
          nextSearchIndex++;
        // If next search starts before region, start it at region
        if (nextSearchIndex < from)
          nextSearchIndex = from;
        // If next search starts beyond region then it fails
        if (nextSearchIndex > to) {
          for (int i = 0; i < groups.length; i++)
            groups[i] = -1;
          return false;
        }
        return search(nextSearchIndex);
    }
    

    三、总结#

    各个匹配的优缺点都有,大家可以按需选择

    如果仅仅只需要获取字符串中是否包含某个字符串,还是用Matcher.find()比较方便

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持码农之家。如有错误或未考虑完全的地方,望不吝赐教。

    资源下载

    相关声明:

    《正则指引 》PDF 完整高清版下载资源由用户 程宜春 于 2021-06-10 09:39:16 分享至百度网盘。仅供想学习正则表达式的网友交流使用,专题参考:正则表达式,

    相关资源

    • JavaScript正则表达式迷你书 v1.1

      JavaScript正则表达式迷你书 v1.1

      JavaScript 正则表达式迷你书 是由个人文章修改而成,感谢各平台读者的支持。 说起正则表达式,我之所以会去详细地研究它,最初的动机是,当我分析前端常见的框架和库的源码时,发现一般被卡住的地方就是它。后来逐渐学习并看懂了ldquo;天书rdquo;,仿佛进入了一个新世界。 有些工具就是这样,当你没有它时,可能并未觉得有啥不好,可是一旦你拥有了它,再也放不下手了。掌握正则了后,对字符串一些复杂操作,竟然能很快地实现。看待问题的角

      大小:3.5 MBJavaScript

      立即下载
    • Python正则表达式全套笔记(含Python3.10官方文档)

      这是一个Python正则表达式学习笔记文档,涵盖了正则表达式的各个方面,含Python3.10正则表达式官方文档,涉及正则的匹配、规则、各种模式、分组、断言等

      大小:3.51 MBPython正则

      立即下载
    • 正则表达式经典实例

      正则表达式经典实例

      正则表达式经典实例 出版时间:2010 《正则表达式经典实例》讲解了基于8种常用的编程语言使用正则表达式的经典实例。书中提供了上百种可以在实战中使用的实例,以帮助读者使用正则表达式来处理数据和文本。对于如何使用正则表达式来解决性能不佳、误报、漏报等常见的错误以及完成一些常见的任务,《正则表达式经典实例》给出了涉及基于C#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET等编程语言的解决方案。《正则表达式经典实例》的读者对象

      大小:45.15MB正则表达式

      立即下载
    • 精通lambda表达式:Java多核编程

      精通lambda表达式:Java多核编程

      lambda表达式权威指南 《 精通lambda表达式:Java多核编程 》介绍Java SE 8中与lambda相关的特性是如何帮助Java迎接下一代并行硬件架构的挑战的。本书讲解了如何编写lambda、如何在流与集合处理中使

      大小:66.3 MBlambda

      立即下载
    • 神奇的匹配:正则表达式求精之旅

      神奇的匹配:正则表达式求精之旅

      《神奇的匹配:正则表达式求精之旅》 从正则表达式的基本概念、基本语法入手,着重于数字验证、字符串验证、数字和字符串混合验证及HTML处理等各个方面的应用。并基于目前流行的程序语

      大小:71.2 MB正则表达式

      立即下载
    • 正则表达式必知必会

      正则表达式必知必会

      大小:7.6MB正则表达式

      立即下载

    学习笔记

    17小时1分钟前回答

    JS正则表达式判断有效数实例代码

    script type="text/javascript" function validate(){ var reg = new RegExp("^[0-9]*$"); var obj = document.getElementById("name"); if(!reg.test(obj.value)){ alert("请输入数字!"); } if(!/^[0-9]*$/.test(obj.value)){ alert("请输入数字!"); } } 验证数字的正则表达式集 验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d{m,n}$ 验证零和非零开头的数字:^(0|[1-9][0-9]*)$ 验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$ 验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$ 验证非零的正整数:^\+?[1-9][0-9]*$ 验证非零的负整数:^\-[1-9][0-9]*$ 验证非负整数(正整数 + 0) ^\d+$ 验证非正整数(负整数 + 0) ^((-\d+)|(0+))$ 验证长度为3的字符:^.{3}$ 验证由……

    14小时43分钟前回答

    python模块之re正则表达式详解

    一、简单介绍 正则表达式是一种小型的、高度专业化的编程语言,并不是python中特有的,是许多编程语言中基础而又重要的一部分。在python中,主要通过re模块来实现。 正则表达式模式被编译成一系列的字节码,然后由用c编写的匹配引擎执行。那么正则表达式通常有哪些使用场景呢? 比如为想要匹配的相应字符串集指定规则; 该字符串集可以是包含e-mail地址、Internet地址、电话号码,或是根据需求自定义的一些字符串集; 当然也可以去判断一个字符串集是否符合我们定义的匹配规则; 找到字符串中匹配该规则的部分内容; 修改、切割等一系列的文本处理; ...... 二、特殊符号和字符(元字符) 这里……