一、 什么是正则表达式:
在维基百科中,正则表达式被形容是“使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。”
二、 为什么使用正则表达式:
在接触到这一概念时,我们可能会觉得它神秘莫测,同时又比较难以理解。首先我们了解了正则表达式(下文简称为正则)是一个字符串,它由一系列我们常用或常见的文字、符号等组合而成,在我们需要检索特定文本时,通过使用正则,往往能够提升效率,避免做出大量重复检查、匹配的劳动。
三、 如何使用正则表达式:
接下来,我们完全可以将正则理解为一门语言,它有属于自己的字符、字符含义、字符组合等,我们可以通过一些实例来具体看一下,究竟什么情况下,这门“神奇”的语言能够帮到我们。
1. 我想找一个已经明确的对象
这个时候我们可以直接写出要找的字符,比如我要找Green;
待查找序列 | 例句 | 匹配结果 |
---|---|---|
Green | The Greens have Mr. Green, Mrs. Green and Tom Green. | The Greens have Mr. Green, Mrs. Green and Tom Green. |
2. 如果我需要查找Green这个单词,请注意,这和前面的匹配条件是有细微差别的
待查找序列 | 例句 | 匹配结果 |
---|---|---|
\bGreen\b | The Greens have Mr. Green, Mrs. Green and Tom Green. | The Greens have Mr. Green, Mrs. Green and Tom Green. |
这里的\b标记单词的边界(实际上是一个位置),在进行主观判断时,建议你通过以下条件查看一个序列是否匹配——
(1) \b本身是不具有长度的,所到达的这个位置是单词边界,就算是匹配成功;
(2) \b的一侧是构成单词的字符,另一侧不能是英文字母、数字、下划线,所以Greens右侧出现了s,就不符合筛选条件了;
3. 现在我们需要查找一个T后面跟随2位长度字符的序列
待查找序列 | 例句 | 匹配结果 |
---|---|---|
T\w{2} | The Greens have Mr. Green, Mrs. Green and Tom Green. | The Greens have Mr. Green, Mrs. Green and Tom Green. |
在这里,The和Tom我们都找到了,其实\w代表任意一个字母、数字或者下划线,而{2}表示将前面的一个单元重复2次,也就是说T1a,T23,T4_,T_6,T__,都是可以通过这个正则筛选出来的,Tony当中的Ton也符合这个正则;
4. 通过修改上面这条正则,我们也可以直接筛选到Tony
待查找序列 | 例句 | 匹配结果 |
---|---|---|
T\w{2,3} | The Greens have Mr. Green, Mrs. Green and Tony Green. | The Greens have Mr. Green, Mrs. Green and Tony Green. |
变化就在{2,3}当中,这里{2,3}表示将前面的一个单元重复最少2次,最多3次,如果你还想筛选Tommy,可以继续修改这个正则为T\w{2,4};
5. 你可能已经发现,在使用\w时,我们不能只筛选英文字母或者说准确到只筛选小写英文字母
待查找序列 | 例句 | 匹配结果 |
---|---|---|
T[a-z]{2,3} | The Greens have Mr. Green, Mrs. Green and Tony Green. | The Greens have Mr. Green, Mrs. Green and Tony Green. |
[a-z]表示从小写字母a到小写字母z这个范围,匹配到任意一个字母就算成功,那么我们使用上面这条正则,就可以筛选到The,Tom,Tony,类似,如果需要筛选大写字母序列,可以使用[A-Z],比如TOM,TONY,就可以使用T[A-Z]{2,3}筛选出来。
四、 在哪里使用正则表达式:
首先,多数的编程语言都能够支持正则,比如python,Java等;
平常在使用Fiddler、Charles等代理工具时,我们也可以通过正则来简化重定向,比如[t|T]1.abc.com可以定位到t1.abc.com或T1.abc.com,其中|表示或。
现在简单总结一下,我们可以通过使用正则来识别全部符合要求的文本,同时,也忽略掉那些不符合要求的文本。在构建正则时,我们需要使用到基本字符和特殊字符。基本字符主要包括英文字母、数字(准确说应该是十进制数字)、下划线、空格等等,我们可以简单理解为,这些字符在一条正则中,表示的就是它本身的意义,没有发生什么变化。比如我们上面已经应用过的,Green表示的就是大写字母G,小写字母r,e,e,n按照顺序组成的一个序列,而在{2,3}当中,2表示的就是数字2。当然还有一些特殊字符,比如[a-z]中,[]就不是简单的括号,而表示在它当中列举的字符里选择一个,当然-也不仅仅是连字符了,而是代表了一个范围。类似还有像\b,\w,\n(一个换行符),\s(一个空格),.(除换行符以外的其他任意一个字符),^(一行开始的位置),$(一行结束的位置)。
推荐大家一个比较实用的正则表达式测试网站:
https://tool.chinaz.com/regex,
在这里可以判断你写的正则表达式是否符合你的预期,对符合筛选条件的字符串标注颜色等。
参考文献:
(1) https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F
(2) 《精通正则表达式》(第3版),电子工业出版社
(3) https://blog.csdn.net/lxcnn/article/details/4355364