正则表达式(regex)是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
通俗的讲就是把一串字符按你的正则规则筛选出你想要的内容。
正则规则就是由元字符与量词组合而成的。
例:
文本:123abc
正则规则:\d
结果:
1
2
3
(匹配到3条结果)
例:
文本:123abc
正则规则:[1-9a-zA-Z]
结果:
1
2
3
a
b
c
(匹配到6条结果)
元字符只能匹配一个字符,必须加上量词才能大量匹配
学习a完量词我们继续上面的例子
文本:123abc
正则规则:\d+
结果:123(匹配到1条结果)
默认:贪婪匹配
量词后面加?变为非贪婪匹配
例:
文本:123abc
正则规则:[1-9a-zA-Z]+
结果:123abc(匹配到1条结果)
我们加个问号试试会发生什么
文本:123abc
正则规则:[1-9a-zA-Z]+?
结果:
1
2
3
a
b
c
(匹配到6条结果)
为什么会这样呢?
正则规则匹配系统会默认贪婪匹配,就是有符合规则的字符有多少匹配多少,但是当量词后面加了问号就变为非贪婪匹配(也叫惰性匹配),+是匹配重复一次到多次,加了问号就会只匹配一次了
小编推荐一个小编比较喜欢用的正则表达式在线测试工具:http://tool.chinaz.com/regex/
为了帮助大家h更好的理解正则表达式小编x再举几个例子
例:
文本:绿茶白茶黄茶青茶红茶黑茶
正则表达式:.茶
结果:
绿茶
白茶
黄茶
青茶
红茶
黑茶
(匹配到6条结果)
例:
绿茶白茶黄茶青茶红茶黑茶
正则表达式:.+茶
结果:绿茶白茶黄茶青茶红茶黑茶
(匹配到1条结果)
例:
<a>…</a>ab<a>cd</a>
正则表达式:<.*>
结果:<a>…</a>ab<a>cd</a>(匹配到1条结果)
例:
文本:a1b2c3
正则表达式:([abc][123])+
结果:a1b2c3(匹配到一条结果)
例:
<a>…</a>ab
正则表达式:<.*>
结果:<a>…<a>
例:
<a>…</a>ab<a>cd</a>
正则表达式:<.*?>
结果:
<a>
</a>
<a>
</a>
(匹配到4条结果)
例:
<a>…</a>ab<a>cd</a>
正则表达式:<..+?>
结果:
<a>…</a>
<a>cd</a>
(匹配到2条结果)