当前位置:文档之家› 正则表达式介绍和例子分析

正则表达式介绍和例子分析

含义:编写字符串处理的程序或网页时,会有查找符合某复杂规则的字符串的需要。

正则表达式就是用于描述这些规则的工具。

它是记录文本规则的代码。

元字符
用来代替字符的符号
表1.常用的元字符
代码说明
.匹配除换行符以外的任意字符
\w匹配字母或数字或下划线或汉字
\s匹配任意的空白符
\d匹配数字
注:\s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等正则表达式中的空格会当成空格匹配。

(输入几个空格就匹配几个)
非打印字符
限定符
重复:表现重复时用的是大括号{}和* + ,表示范围时用的是中括号[],中括号里面是只选其中一个的组合。

表达分组时用圆括号(),一个圆括号表示一个意思。

表2.常用的限定符
代码/语法说明
*重复零次或更多次
+重复一次或更多次
重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次
字符类[],用来表示取字符的范围区间,用中括号括起来
[0-9]代表\d
[a-z0-9A-Z]表示\w
分支条件,用|表示或者的关系。

贪婪与懒惰、最先开始匹配拥有最高优先权
*、+和限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个就可以实现非贪婪或最小匹配。

.*表示尽可能匹配多的字符
.*表示尽可能少的字符
例如:字符串aabab,用贪婪匹配a.*b得到aabab,用懒惰匹配a.*b得到aab和ab
定位符
定位符使您能够将正则表达式固定到行首或行尾。

它们还使您能够创建这样的正则表达式,这些正则表达
式出现在一个单词内、在一个单词的开头或者一个单词的结尾。

定位符用来描述字符串或单词的边界,^和$分别指字符串的开始与结束,\b描述单词的前或后边界,\B表
示非单词边界。

正则表达式的限定符有:
字符描述
^匹配输入字符串开始的位置。

如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后匹配。

$匹配输入字符串结尾的位置。

如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前匹配。

\b匹配一个字边界,即字与空格间的位置。

\B非字边界匹配。

子表达式分组获取()
分组,用()把子表达式括起来,给一个组号,后面可以再用
后向引用,用()定义的分组,可以给它定一个组名,在后面加以利用。

用(<Word>\w+)或者(’Word’\w+)定义\w+组名为Word,利用方式为\k<Word>
捕获
从下面的例子中可以看到,根据正则表达式,只捕获了括号内的东西到组中,第一个括号前面^\D*匹配到的东西被忽略了。

零宽度断言
(=exp) 用法:\b\w+(=ing)\b,匹配以ing结尾的单词的前面部分,如查找I’m singing and dancing,会匹配sing和danc
(<=exp) 用法:(<=rea)\w+\b,匹配以rea开头的单词的后面部分,如查找
reading a book,会匹配ding
注释:(#comment)
例如:2[0-4]\d(#200-249)|25[0-5](#250-255)|[01]\d\d(#0-199)
反义
反义,找完全相反的内容。

注意这里使用的都是大写
表3.常用的反义代码
代码/语法说明
\W匹配任意不是字母,数字,下划线,汉字的字符(剩下符号等) \S匹配任意不是空白符的字符
\D匹配任意非数字的字符
\B匹配不是单词开头或结束的位置
[^x]匹配除了x以外的任意字符
[^aeiou]匹配除了aeiou这几个字母以外的任意字符
平衡组/递归匹配
('group')把捕获的内容命名为group,并压入堆栈(Stack)
('-group')从堆栈上弹出最后压入堆栈的名为group的捕获内容,如果堆栈本来为空,则本分组的匹配失败
((group)yes|no)如果堆栈上存在以名为group的捕获内容的话,继续匹配yes 部分的表达式,否则继续匹配no部分
(!)零宽负向先行断言,由于没有后缀表达式,试图匹配总是失败
<[^<>]*((('Open'<)[^<>]*)+(('-Open'>)[^<>]*)+)*((Open)(!))>
可以从xx <aa <bbb> <bbb> aa> yy中找到<aa <bbb> <bbb> aa>
可以找到配对的<div>和</div>,不管有没有不配对的html出现。

好的例子
将所有地址中的ROAD写成RD.
若地址中的字符不是大写的,先可以都改成大写的。

匹配以罗马数字标示的四位数年份
注:在罗马数字上加一个横线,就会乘以1000倍。

所以4000就用ⅯⅬ(其中L要带上横线)紧凑正则表达式:
^M{0,3}(CM|CD|DC{0,3})(XC|XL|LX{0,3})(IX|IV|VI{0,3})$
最后对应的松散正则表达式是
匹配电话号码
紧凑正则表达式:(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$松散正则表达式:。

相关主题