java正则表达式-常见符号

阅读数:23 评论数:0

跳转到新版页面

分类

python/Java

正文

一、Java正则表达式语法

1、转议字符

System.out.print("\\");    // 输出为 \
System.out.print("\\\\");  // 输出为 \\

2、正则表达式语法

字符

说明

\

将下一字符标记为特殊字符、文本、反向引用或进制转义符。

例:“\n” 表示换行符,“\\(” 表示 "("。

^

匹配字符串开始输入的位置。

$

匹配输入的字符串最末位置。

*

零次或多次匹配前面的字符或子表达式。

例: zo* 匹配"z"和"zoo"。* 相当于 {0,}。

+

至少有一次匹配前面的字符或子表达式。

例: "zo+"与"zo"和"zoo"匹配,但与"z"不匹配。+ 相当于 {1,}。

?

零次或一次匹配前面的字符或子表达式。

例:"do(es)?"匹配"do"或"does"中的"do"。? 相当于 {0,1}。

{n}

匹配指定的 n 次。(n为非负整数)

例:"o{2}"与"food"中的两个"o"匹配。

{n,}

最少匹配 次。(n为非负整数)

例: "o{2,}",至少匹配2次,所以"foood"中有 3个o,匹配了3次。

{n,m}

最少匹配 n 次,最多匹配 m 次。(n、m为非负整数,n <= m

例:"o{1,3}"匹配1-3个o,所以匹配"fooooood"的前3个o。

PS:逗号和数字之间不能有空格。

?

字符 ? 紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,表示匹配模式是"非贪心的",其搜索尽可能短的字符串,默认的"贪心"模式搜索尽可能长的字符串。

例:在字符串"oooo"中,"o+?"只匹配单个"o",而"o+"匹配所有"o"。

.

匹配除"\r 和 \n"之外的任何单个字符。

(pattern)

匹配 pattern 并捕获该匹配的子表达式。若要匹配括号字符 ( ),使用""""。

(?:pattern)

匹配 pattern 但不捕获该匹配的子表达式。

(?=pattern)

执行正向预测先行搜索的子表达式,匹配处于匹配 pattern 的字符串的起始点的字符串。

(?!pattern)

执行反向预测先行搜索的子表达式,匹配不处于匹配 pattern 的字符串的起始点的字符串。

x|y

匹配 x 或 y

例:'z|food' 匹配"z"或"food"。'(z|f)ood' 匹配"zood"或"food"。

[ xyz ]

匹配包含在内的字符。

例:"[abc]"匹配"plainbc"中的"abc"。

[^xyz]

匹配不包含在内的字符。

例:"[^abc]"匹配"plain"中"p","l","i","n"。

[a-z]

匹配在范围内的字符。

例:"[a-z]"匹配a-z的所有小写字母。

[^a-z]

匹配不在范围内的字符。

例:"[^a-z]"匹配除a-z以外的字符。

\b

匹配边界字符。

例:"er\b"匹配边界上的"er",不匹配"verb"中间的"er"。

\B

不匹配边界字符。

例:"er\B"匹配"verb"中间的"er",不匹配"never"边界上的"er"。

\cx

匹配 x 指示的控制字符。(x 的值必须在 A-Z 或 a-z 之间)

例:\cM 匹配 Control-M 或回车符。

\d

数字字符匹配。相当于 [0-9]。

\D

非数字字符匹配。相当于 [^0-9]。

\f

换页符匹配。相当于 \x0c 和 \cL。

\n

换行符匹配。相当于 \x0a 和 \cJ。

\r

匹配一个回车符。相当于 \x0d 和 \cM。

\s

匹配任何空白字符,包括空格、制表符、换页符等。

\S

匹配任何非空白字符。

\t

制表符匹配。相当于 \x09 和 \cI 。

\v

垂直制表符匹配。相当于 \x0b 和 \cK 。

\w

匹配任何字类字符,包括下划线。相当于"[A-Za-z0-9_]"。

\W

与任何非单词字符匹配。相当于"[^A-Za-z0-9_]"。

\xn

匹配 n,此处的 n 是一个十六进制转义码。十六进制转义码必须正好是两位数长。

例:"\x41"匹配"A"。"\x041"与"\x04"&"1"等效。允许在正则表达式中使用 ASCII 代码。

\num

匹配 num,此处的 num 是一个正整数。到捕获匹配的反向引用。

例:"(.)\1"匹配两个连续的相同字符。

\n

标识一个八进制转义码或反向引用。如果 \n 前面至少有 n 个捕获子表达式,那么 n 是反向引用。否则,如果 n 是八进制数 (0-7),那么 n 是八进制转义码。

\nm

标识一个八进制转义码或反向引用。如果 \nm 前面至少有 nm 个捕获子表达式,那么 nm 是反向引用。如果 \nm 前面至少有 n 个捕获,则 n 是反向引用,后面跟有字符 m。如果两种前面的情况都不存在,则 \nm 匹配八进制值 nm,其中 和 m 是八进制数字 (0-7)。

\nml

当 n 是八进制数 (0-3),m 和 l 是八进制数 (0-7) 时,匹配八进制转义码 nml

\un

匹配 n,其中 n 是以四位十六进制数表示的 Unicode 字符。

例:\u00A9 匹配版权符号 (©)。

二、Java中与正则相关的类

1、Pattern

一个Pattern是一个正则表达式经编译后的表现模式。

(1)static Pattern compile(String regex)

将给定的正则表达式编译并赋给Pattern类。

(2)Matcher matcher(CharSequence input)

生成一个Matcher对象

(3)static boolean matches(Stringn regex,CharSequence input)

该方法适合于该正则表达式只会使用一次的情况,也就是只进行一次匹配工作,因为这种情况下并不需要生成一个Matcher实例。

(4)String[] split(CharSequence input)

将目标字符串按照Pattern里所包含的正则表达式为模式进行分割。

 

2、Matcher

一个Matcher对象是一个状态机,它依据Pattern对象做为匹配模式对字符串展开匹配检查。

(1)Matcher appendReplacement(String sb,String replacement)

将当前匹配子串替换为指定字符串,并且将替换后的子串以及其之前的上次匹配子串之后的字符串段添加到一个StringBuffer对象里。

例如,有字符串fatcatfatcatfat,假设既有正则表达式模式为"cat",第一次匹配后调用appendReplacement(sb,"dog"),那么这时StringBuffer sb的内容为fatdog,也就是fatcat中的cat被替换为dog并且与匹配子串前的内容加到sb里,而第二次匹配后调用appendReplacement(sb,"dog"),那么sb的内容就变为fatdogfatdog,如果最后再调用一次appendTail(sb),那么sb最终的内容将是fatdogfatdogfat。

(2)StringBuffer appendTail(StringBuffer sb)

将最后一次匹配工作后剩余的字符串添加到一个StringBuffer对象里。

(3)String find()

尝试在目标字符串里查找下一个匹配子串。

(4)String group(int group)

正则表达式中以'()'标记的子表达式所匹配的内容就是一个分组(group)

分组索引是从1开始的,0代表正则表达式匹配的整个字符串,group(i)代表第i组匹配的内容。