您的位置:首页 > 其它

正则表达式

2016-04-02 21:13 204 查看

正则表达式

特殊字符

^ : 标定限定符开始的地方。

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

() : 标记一个子表达式的开始和结束位置。

* : 匹配前面的子表达式零次多次

+ : 匹配前面的子表达式一次多次

. : 匹配换行符以外的任何字符 。

[]:匹配一个中括号开始和结束的地方。

\ : 限定表达式。

限定符

{ : 标记限定符开始的地方

{n} : n为非负整数,至少匹配n次。

{n,m}: 最少匹配n次,最多匹配m次。

\w : 包括下划线之外的任何单词字符。类似于[A-Za-z0-9_]

\W : 匹配任何非单词字符 相当于[^A-Za-z0-9_]

\d : 匹配一个数字 [0-9]

\D : 匹配一个非数字[^0-9]

[^xyz] 匹配非包含的任意一个字符。

\B :匹配非边界字符

\b:匹配边界字符 指定字符两侧不能同时为字母数字下划线

\s : 任意空白字符 相当于[\r\n\f\t\v]

\S : 任意非空白字符 相当于 [^\r\n\f\t\v]

[a-d[m-p]] : a到d,或者m到p [a-dm-p] 并集

[a-z&&[def]] : def a-z与def的交集

[a-z&&[^bc]] : 除bc外,a到z的集合。

量词返回目录

贪婪量词(greedy)勉强量词(relunctant)侵占量词(possessive)意义
X?X??X?+匹配X零次或一次
X*X*?X*+匹配X零次或多次
X+X+?X++匹配X一次或多次
X{n}X{n}?X{n}+匹配X n次
X{n,}X{n,}?X{n,}+匹配X至少几次
X{n,m}X{n,m}?X{n,m}+匹配X至少n次,但不多于m次
贪婪:强迫匹配器读入整个输入的字符串

勉强:从输入字符串的开始处开始,每次勉强的吞噬掉一个字符串来寻求匹配,最后才会尝试整个输入的字符串。

侵占:吞掉整个输入的字符串,尝试着一次匹配。

捕捉组

捕捉组,简而言之为我们能从指定字符串中捕捉到我们所要的子串,然后分组,根据组号能取出我们所要的数据。

AGE:

组号为括号的顺序

A(b(c)de(fg))hi(jk)lmn

组号内容解释
组0A(b(c)de(fg))hi组0为默认的
组1b(c)de(fg)组1为从左到右第一个括号括起来的内容
组2c组2为第二个括号括起来的内容
组3fg组3位从左到右括号括起来的内容
组4jk组4为从左到右第四个括号括起来的内容
java JDK中groupCount统计Group数不会将group0统计在内。

反向引用

匹配字符串的捕获部分存放在内存中,通过反向引用稍后会继续调用。

age: 134(\d\d)\1

匹配以134开头的后面两个数字重复两次的串。

\1代表重复组1括号内的的数据。

反向引用反斜线+组号

高级分组 非捕捉组

以(?)开头的组是非捕捉组,不捕捉文本,也不针对组合计数,如果小括号以?开头,那么这个分组就不会捕捉分组。

表达式解释
(?=X)零宽度先行断言,仅当表达式在此位置的右侧才能继续匹配。
(?!X)零宽度负先行断言,仅当子表达式X不在此位置。
(?<=X)零宽度正后发断言,仅当子表达式X不在此位置的右侧匹配才能继续匹配。
(?<!X)零宽度负后发断言,仅表达式X不在此位置左侧才能继续匹配。

AGE:

(?<!4)56(?=9) 56前面不能为4,后面必须匹配9。

注释

表达式含义
(?#comment)comment只代表注释,不代表任何含义。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: