正则表达式学习笔记与经验总结

来源:互联网 发布:淘宝重复开店不查了 编辑:程序博客网 时间:2024/05/22 06:27

以前总是习惯把笔记都写在笔记本上,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,}

      .  :  单字符通配符。不包括\n

      {} :  表示个数或范围。

      [] :  只匹配一个单个字符。如[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。



0 0
原创粉丝点击