Java正则表达式

1.介绍

        正则表达式(regular expression)是一个字符串,用来描述匹配一个字符串集合的模式。对于字符串的处理,正则表达式是一个强大的工具。可以使用正则表达式来匹配、替换、拆分字符串。

2.匹配字符串

        以String类中的matches和equals方法为例,以下两个语句结果都为true

"Java".matches("Java");
"Java".equals("Java");

        然而,matches方法功能更加强大。它不仅可以匹配一个固定的字符串,还可以匹配符合一个模式的字符串集。例如,以下语句结果都为true。

"Java is fun".matches("Java.*");
"Java is cool".matches("Java.*");
"Java is powerful".matches("Java.*");

        前面语句中的“Java.*”是一个正则表达式。它描述了一个字符串模式,以Java开始,后面跟0个或多个字符串。这里,子字符串.*匹配0或者多个任意字符。

3.正则表达式语句

       正则表达式由字面值字符和特殊符号组成。

       注意:反斜杠是一个特殊的字符,在字符串中开始专一序列。因此Java中需要使用\\来表示\。

 

正则表达式 匹配示例
x指定字符xJava匹配Java
.任意单个字符、除了换行符外Java匹配J..a
(ab|cd)ab或者cd        ten匹配t(en|im)
[abc]a\b或者cJava匹配Ja[uvwx]a
[^abc]除了a、b或者c外的任意字符Java匹配Ja[^ars]a
[a-z]

a到z

Java匹配[A-M]av[a-d]
[^a-z]除了a到z外的任意字符Java匹配[^b-d]
[a-e[m-p]]

a到e或m到p

Java匹配[A-G[I-M]]av[a-d]
[a-e&&[m-p]]

a到e与m到p的交集

Java匹配[A-P&&[I-M]]av[a-d]
\d一位数字,等同于[0-9]

Java2匹配"Java[\\d]"

\D一个非数字$Java匹配"[\\D][\\D]ava"
\w单词字符Java1匹配"[\\w]ava[\\d]"
\W非单词字符$Java匹配"[\\W][\\w]ava"
\s空白字符"Java 2"匹配"Java\\s2"
\S非空白字符

Java匹配"[\\S]ava"

p*0或者多次出现模式p

aaaa匹配"a*"

abab匹配"(ab)*"

p+1次或者多次出现模式p

a匹配"a+b"

able匹配”(ab)+.*“

p?0或者1次出现模式p

Java匹配"J?Java"

ava匹配”J?ava“

p{n}正好出现n次模式p

Java匹配"Ja{1}"

Java不匹配".{2}"

p{n,}至少出现n次模式p

aaaa匹配"a{1,}"

a不匹配"a{2,}"

p{n,m}n到m(不包含)次出现模式p

aaaa匹配"a{1,9}

abb不匹配"a{2,9}bb"

\p{P}

一个标点字符!"#$%&'()*+,-/:;<=>?@[\]^_{|}~

J?a匹配"J\p{P}a"

J?a不匹配"J\p{P}a"

4.替换和拆分字符串

        如果字符串匹配正则表达式,String类的matches方法返回true。String类也包含repalceAll、replaceFirst和split方法,用于替换和拆分字符串。

        replaceAll方法替换所有匹配的子字符串,replaceFirst方法替换第一个匹配的子字符串。

System.out.println("Java Java Java".replaceAll("v\\w","wi"));

显示

Jawi Jawi Jawi

注意:默认情况下,所有的量词符都是“贪婪”的。这以为这它们会尽可能匹配最多次。

比如,下面的语句显示JRvaa。因为第一匹配成功的是aaa。

System.out.println("Jaaavaa".replaceFirst("a+","R"));

可以通过在后面添加问号(?)来改变量词符的默认行为。量词符变为“不情愿”或“惰性”的,这意味着它将匹配尽可能少的次数。例如,下面语句显示JRaavaa,因为第一瓜匹配成功的是a。

System.out.println("Jaaavaa".replaceFirst("a+?',"R"));

 

以上内容来源于《Java语言程序设计与数据结构  基础篇》仅供大家参考,欢迎批评指正! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值