java正则表达式-常见符号

阅读数:67 评论数: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组匹配的内容。




相关推荐

1、基本类型 在程序设计中经常用到一系列类型(基本类型),它们需要特殊对待。对于这些类型,Java采取与C和C++相同的方法,也就是说,不用new来创建变量,于是创建一个并非引

1、直接常量 为了编译器可以准确的知道要生成什么样的类型,可以给直接常量后面添加后缀字符标志它的类型,若为L表示long,F表示float,D表示double。也可以利用前缀表示进制,0x表示十六进制

Java完全采用动态内存分配方式。每当想创建新对象时,就需要使用new关键字来构建此对象实例。 1、this 在构造器中,如果为this添加了参数列表,那么就有了

一、类的继承 1、说明 (1)extends关键字用于类的继承。 (2)在C++中,方法的动态绑定是使用virtual关键字来实现的,而在Java中,动态绑定是默认的形为,不需要添加额外的关键字。 (

1、类型信息 指程序能够在运行时发现和使用类型信息,我们一般使用两种方式来实现运行时对象和类的信息:传统的RTTI和反射机制。 (1)class对象 <p

用于描述Java源代码,使得我们能够以将由编译器来测试和验证的格式,存储有关程序的额外信息。使用时在@后面跟注解的名字。 1、预定义的三个注解<

一、创建线程 创建线程有四种方式:继承Thread类、实现Runnable接口、实现Callable接口、通过线程池创建。 1、继承Thread 重写run方法。 class A extends Th

一、Collection接口 Collection接口的iterator和toArray方法都用于获得集合中的“所有元素”。前者返回一个“iterator”对象,后者返回一个包含集合中所有元素的数组。

1.hashCode的存在主要用于查找的快捷性,如hashtable,hastmap等,hashcode是用来在散列存储结构中确定对象的存储地址的。 2.如果两个对象相同,就是适用

Java中的数据类型,可分为两类: 1.基本数据类型,它们之间的比较,应用双等号,比较的是它们的值。 2.复合数据类型(类) 当他们用双等号进行比较的时