以前总是习惯把笔记都写在笔记本上,blog便一直荒废着。现在趁着暑假有几天清闲日子,还是把笔记本上的东西都搬到博客里来吧。顺便温故而知新下——正则表达式。
先来个复杂的:比如如下邮箱,字母开头,可以含数字,字母,点,加减号,以及下划线。
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
要看懂上面的正则表达式,先学习如下四条规则:
1。^、$为定位符,分别表示开始和结束。如^abc <=> 以abc开头;abc$ <=> 以abc结尾;
2。* : 0个或多个。如 ab* <=> ab{0,}
+: 1个或多个。如 ab+ <=> ab{1,}。注意这里只针对单个b,表示b有一个或多个,如果涵括ab,则需要叫一个括号,即(ab)+。
? : 0个或1个。 如 ab? <=> ab{0,1}
| :或者。如( a | b)* <=> a{0,} 或者 b{0,}
{} : 表示个数或范围。
[] : 只匹配一个单个字符。如[a-zA-Z]表示单个字母
3。重要的特殊元字符,需要记忆,值得记忆。
\d : 0-9的单个数字。11位电话号码就表示为 \d{11}。
\S : 与\s相反。
\s: 表示单个空格符,含tab键和换行符。
\w : 表示字母、数字或下划线的单个字符。
\W: 与\w相反。
\b : 匹配一个边界。如"love" 将匹配成功正则表达式"ve\b"。
4。用\转义来表示特殊字符。如\uxxxx表示Unicode编码字符。\*表示*号等。
否定符的使用[^],当^进入了[]中时,将失去定位符的含义,和[]组合形成否定符。如[^0-4]表示不包含0,1,2,3,4。
接下来,我们再来看看开头贴出来的那个邮箱地址匹配,看看是不是很简单。
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
分析:
\w+:一个或多个字母、数字或下划线。[-+.]\w+:以-、+、.为首,接着含一个或多个字母、数字或下划线。*:零个或多个。
@:邮箱必备字符。\w+([-.]\w+)*:同上分析。\.:表示单个.字符。
是不是觉得很简单,没错,正则表达式看起来复杂,实则不难。提供个正则表达式的测试网址:http://tool.chinaz.com/regex/。大家练练手。
最后,贴一些常用的正则表达式匹配。
汉字:^[\u4e00-\u9fa5]{0,}$
中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址时有用)
空白行的正则表达式:\n\s*\r (可以用来删除空白行) HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? />。。。。。详见http://www.cr173.com/html/19109_all.html。