码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式基础知识01

时间:2014-11-08 20:53:28      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:perl   正则表达式   

使用元字符

匹配数字:

\d

[0-9]

\D

[^0-9]

匹配字母数字

\w

[0-9a-zA-Z_] 注意:包括下划线

\W

[^0-9a-zA-Z_]

匹配空白字符

\s

任何空白字符[\f\n\r\t\v]

\S

任何非空白字符[^\f\n\r\v]

[\b]

匹配退格符是一个特例

匹配十六进制是使用\x前缀加数字  \x0A 匹配\n

八进制使用\0前缀加数字

 

例子:

?  匹配邮箱:[\w\.]+@[\w\.]+\.\w+    但不是最好的,不完整

?  邮箱第一字母必须是字母或下划线,因此符合要求的的模式是:

                 \w*[\w.]+@[\w.]+\.\w+

Note:当在[]中使用.、+、*等元字符时会自动将其解释为普通字符,因此[\w.]和[\w\.]是一样的。

重复匹配

匹配一个或多个 +

匹配零个或多个 *

匹配零个或一个 ?

匹配重复次数  {n}、{n,m}、{n,}至少n次、{ ,m}最多m次【包含n,m】

例子:

?  匹配一个网页地址: https?://[\w./]+或http[s]?://[\w./]+

?  匹配空行(在windows中空格是\n\r,在Linux/Unix中空格是\n),单独匹配各自系统中的空行是:Windows—‘\r\n \r\n’ Linux/Unix—‘\n\n’;因此使用一个模式可以表示为: [\r]?\n[\r]?\n

?  检查日期格式是否正确(对日期值的检查应该在此之前确定):

\d{1,2}[-\/]\d{1,2}[-\/]\d{2,4}

防止过度匹配:+、*都是贪婪性,会按照最多的去匹配;要使用懒惰型版本的元字符只需要给贪婪型元字符加上?后缀即可。

+?、*?、{n,}?是各自贪婪型元字符对应的懒惰型元字符版本

?  将HTML中的<B></B>标签中的内容匹配出来

<B>AK</B> and <B>HI</B>

模式1:[<B/>].*[</B>]   过度匹配

模式2:[<B/>].*?[</B>]

位置匹配

元字符

含义

\bword\b

匹配单词边界,匹配单词长度为4,仅仅匹配单词word本身

 his cap and cape from capsized

例子:

\bcap\b  将匹配cap

\bcap 将匹配以cap开头的任意单词

cap\b 匹配以cap结尾的任意单词

\B\B

不匹配单词边界,

 colors and – coded pass-key

例子:

\B-\B将匹配一个前后都不是单词边界的连字符 pass-key

字符串的开头:^

字符串的结尾:$

 

分行匹配模式:?m (multiline mode)

使用行分隔符后,^除了匹配字符串的开头外,还能够匹配行分隔符(换行符)后面的开始位置,同样$还能够匹配行分隔符后面的结束位置。(?m)必须出现在整个模式的前面

例子:

判断某一文件是不是xml文件:

    ^\s<\?xml .*\?>

</html>标签后面不应该有其他内容了,进行合法检查:

</[Hh][Tt][Mm][Ll]>\s*$

匹配JavaScript中的所有注释:

   (?m)^\s*//.*$

使用子表达式

    元字符和字符是正则表达式的基本构件。子表达式是尅嵌套的,

例子

?  在html中使用&nbsp(None-breaking space)表示非换行型空格,需要匹配一个或多个&nbsp;但是使用模式’&nbsp;{2,}’是不对的,需要对整体进行匹配因此使用括号“()”将其括起来做一个独立的元素使用,该模式就是子表达式,通常使用小括号括起来。(&nbsp;){2,}

?  匹配IP地址格式:

模式1:\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}

模式2:(\d{1,3}.){3}\d{1,3}

?  把用户记录中的年份数字打印出来

日志格式:

ID:042

SEX:M

DOB:1996-08-17

Status:Active

匹配模式:(19|20)\d{2}

?  使用子表达式的嵌套,匹配IP地址格式且匹配合法的IP第地址,在构造正则表达式一定要清楚相匹配什么,不像匹配什么:

匹配IP地址:任何一个1位或2位数字、任何一个以1开头的3位数字、任何一个以2开头、第二位数字在0~4的3位数字、任何一个以25开头,第3位数字在0~5之间的3为数字

模式:(((\d{1,2})|{1\d{2})|(2[0-4]\d)(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4)|(25[0-5]))

正则表达式基础知识01

标签:perl   正则表达式   

原文地址:http://blog.csdn.net/wenwen1538/article/details/40924543

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!