首先介绍一个练习工具:http://tool.chinaz.com/regex/
在线验证工具。
正则表达式到底是什么东西?
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
常用元字符
代码 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线或汉字 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
常用限定符
代码/语法 | 说明 |
---|---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
常用反义词
代码/语法 | 说明 |
---|---|
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
正则表达式里面的模式问题
【1】贪婪模式
比如说\d{1,4}可以匹配1个到4个字符,在贪婪模式下面引擎尽可能匹配多的字符
比如上面的式子匹配123456这个字符串,他会匹配到1234这个字符串。
【2】非贪婪模式
非贪婪从字面上讲和前面的相反,第一次找到符合条件的即认为已经找到目标串。
还是上面的例子,123456 非贪婪只会一个个匹配。即结果是1,2,·····
【3】模式切换
引擎默认是贪婪模式,要想转换为非贪婪,只要在范围选择的表达式后面加一个?即可。
比如上面你的式子,\d{1,4}?就完成了模式转换。