正则表达式入门
Posted 高斯程序设计
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式入门相关的知识,希望对你有一定的参考价值。
正则表达式: 又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。
1. 正则表达式介绍
1.1 概念解释
正则表达式: 又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
1.2 引擎
DFA
传统型NFA
POSIX NFA
详细介绍还是继续看百度百科吧 (>﹏<)
2. 正则表达式使用
2.1 表达式总览
参考百度百科:https://baike.baidu.com/item/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1700215?fr=aladdin
2.2 常用元字符
2.2.1 内容性字符
字符 | 理解 |
---|---|
.(点) | 匹配任意单个字符。 |
\w | 单词字符,大多数情况下可等同[A-Za-z0-9_],有得引擎可匹配中文,有的不可以,如果在特殊情况下需要进行测试 |
\d | 数字,等同[0-9] |
\b | 单词边界,即排除\w以外的字符 |
\W \D \w, \d 互斥集合
\s 空白字符,等价与[\f\n\r\t\v], 互斥集合\S
2.2.2 功能性字符
字符 | 理解 |
---|---|
[] | 区间段,比如[A-Fa-f0-7]、[aui391],前后字符ascii码值大小不可颠倒。 |
^ | 匹配字符开始的位置。 如果在[]里使用则表示匹配字符不再区间内,例如[^\d] 标识匹配除\d以外的字符。 |
$ | 匹配字符的结束位置。 |
+ | 表示表达式出现1次或重复多次; |
? | 表示表达式出现0次或1次; |
* | 表示表达式出现任意次数 |
{n} | 表示出现n次, |
{n, m} | 表示出现n到m次, |
{n,} | 出现大于n次 |
\ | 转义符 |
() | 分组获取,可使用1…99(最大数百度百科上是9)获取到分组匹配的结果,具体可以看总览表。 |
逻辑或 | 表达式的顺序会影响匹配结果,会将最先匹配到的结果返回 |
(?=pattern) | 非获取匹配,匹配单词中的一部分,该匹配部分紧邻后部分需要符合pattern表达式 |
(?!pattern) | 非获取匹配,匹配单词中的一部分,该匹配部分紧邻后部分不符合pattern表达式 |
(?<=pattern) | 非获取匹配,匹配单词中的一部分,该匹配部分紧邻前部分需要符合pattern表达式 |
(? | 非获取匹配,匹配单词中的一部分,该匹配部分紧邻前部分不符合pattern表达式 |
2.3 使用技巧
正则表达式不支持逻辑计算。
编写正则表达式的思路:
观察需要匹配的文本特点和规律。
尝试性编写正则表达式,由简入深的编写。
反复测试正则表达式和完善表达式。
单词匹配
单词列表
1 |
house |
查找长度5,第二个字符是o的单词
.o…
(这样匹配的时候会匹配上部分文本,以下有解决方法)
第二位是o或i的单词
.[oi]…
该表达式会匹配picture、animal的部分,解决这个问题可以在表达式两边加上\b, 结果
\b.[oi]…\b
子表达式和重复匹配
子表达式是表示一个复杂匹配的单元,使用()括起来的一组复杂的正则表达式。
1 |
((\d|[12]\d|1\d\d|2[0-4]\d|25[0-5])\.)((\d|[12]\d|1\d\d|2[0-4]\d|25[0-5])\.)((\d|[12]\d|1\d\d|2[0-4]\d|25[0-5])\.)(25[0-5]|1\d\d|2[0-4]\d|[12]\d|\d)等价于 |
以上(\d|[12]\d|1\d\d|2[0-4]\d|25[0-5])和((\d|[12]\d|1\d\d|2[0-4]\d|25[0-5]).)是子表达式。
回溯引用
回溯引用需要将要匹配的表达式分组。以下给出两个示例。
匹配html的中的h标签的文本段落
1 |
<h1>h1段落</h1> |
正确匹配的正则表达式<([Hh][1-6])>.*</\1>
其中\1就是回溯的([Hh][1-6])表达式。
查找文本中的相邻重复单词
文本
1 |
This is a block of of text, serveral words |
表达式[ ](\w+)[ ]+\1
,会 将以上文本中的of of 、 are are和and and查找出来。
回溯替换,以下使用js代码作为示例了
1 |
var str = '2016-02-16'; |
贪婪匹配和非贪婪匹配
贪婪匹配,尽可能多的匹配文本,正则表达式默认启用的就是贪婪模式, +和都是贪婪匹配的字符;而非贪婪匹配,则是尽可能少的匹配文本,启用非贪婪模式则使用*?。
文本aaaaa
使用a+(贪婪模式)则会匹配整段文本
而使用a+?只则匹配文本中的单个a字符;
1 |
html <div>第一段文本html内容</div><div>第二段html内容</div> |
3常用正则表达式
规则 | 正则表达式语法 | ||
---|---|---|---|
一个或多个汉字 | ^[\u0391-\uFFE5]+$ | ||
邮政编码 | ^[1-9]\d{5}$ | ||
QQ号码 | ^[1-9]\d{4,10}$ | ||
邮箱 |
|
||
用户名 (字母开头 + 数字/字母/下划线) |
|
||
手机号码 |
|
||
18位身份证号 |
|
-------------感谢您的阅读祝您生活愉快!-------------
以上是关于正则表达式入门的主要内容,如果未能解决你的问题,请参考以下文章