开始
正则表达式是神秘而有趣的,一起来看看吧~~
什么是正则表达式?
A regular expression, regex or regexp(sometimes called a rational expression)is, in theoretical computer science and formal language theory, a sequence of characters that define a search pattern. Usually this pattern is then used by string searching algorithms for “find” or “find and replace” operations on strings. ——WIKIPEDIA
一切都是模式!!!
本质上,正则表达式(简称“正则”)是根据特定规则实现的适用的模式,用于匹配指定范围的文本。
可以看到这里主要包括:规则、模式、范围、文本
规则:也就是正则表达式的语法,包括原义文本字符,修饰符,和元字符。其中修饰符可分为i
,g
,m
三种;元字符又可以分为字符类,范围类,预定义类,量词,分组等等,还有贪婪,非贪婪,正向前瞻,负向前瞻等特殊用法。
模式:模式可以理解为是最终用于匹配文本的一组规则集合,也可以说是一种适用的通用规律。必须提及的是,模式是对最终实现目的的一种描述,其定义方式和复杂程度,和目的紧密相关。因此在编写前,需要明确最终的目的,是用于检索?提取数据?还是用于校验?
范围:这里的范围,指的是需要进行处理的文本数据可能包含的场景。因为针对不同数据,不同场景得到的模式不尽相同,可能对于数据集A,正则表达式R可得到正确结果,但是在添加一条新类型数据后,R定义的规则便不适用了。因此在正则表达式的世界中,不存在最好的,只有最适用的,而且每个人对数据和规则的理解也千差万别,所以无需追求适配所有情况的正则,那无异于画蛇添足。
文本:正则表达式的根本就是匹配文本。在此基础上,进行校验,和相关操作,如JavaScript中的String.search()
和String.replace()
函数便是分别实现了检索和替换的操作。
正则适用场景有哪些?
一切与文本有关的操作。
当前主流的编程语言几乎都实现了对正则的支持。但可能由于语言自身的使用范围,导致对正则的实现存在细微的差异,但中心思想和基本语法却是相一致的。
因为正则的出现便是为了在Unix系统下方便操作文本,因此在各系统的终端或命令行中都可以使用,只是需要了解系统对正则的支持方式。
支持正则的IDE中,有助于更快定位文件或代码片。
学习正则能收获什么?
- 当然,首先就是利用正则处理字符串的技术
- 个人认为,其内涵的思想和方法也是值得深入体会的
- 对规则的提炼,从特殊到一般的模式
- 从局部到整体的分析策略
- 知己知彼百战不殆
- 合理分解问题的方法
- 没有最好的,只有最适合的
- 逼格不是装出来的,是练出来的
推荐资源
教程:
网站:
博客:
书籍:
- JavaScript Regular Expressions:英文书籍,针对JavaScript正则
- 精通正则表达式(第三版)简体中文:涉及语言较多,推荐阅读前6章内容,后续章节按需阅读。