正则表达式

本文介绍了正则表达式的概念及其在Java中的使用,包括如何进行字符串匹配、常用的正则表达式模式以及如何利用正则表达式进行字符串替换和拆分。通过实例展示了正则表达式在验证用户输入、社会安全号、电话号码格式等方面的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、匹配字符串
经常需要编写代码来验证用户输入,比如验证输入是否是一个数字,是否是一个全部小写的字符串。一个简单有效的方法是用正则表达式来完成这个任务。正则表达式是一个字符串,用来描述匹配一个字符串集合的模式。对于字符串处理来说,正则表达式是一个强大的工具,可以使用正则表达式来匹配。替换和拆分字符串。
"Java".matches("Java");
这个语句的结果为true.
matches方法的功能强大。它不仅可以匹配一个固定的字符串,还可以匹配符合一个模式的字符串集。
"Java is fun".matches("Java.*");
"Java.*"是一个正则表达式。它描述了一个字符串模式,以Java开头,后面跟0个或多个字符串。


 2、常用的正则表达式
正则表达式                 匹配
x                               指定字符x
.                                任意单个字符,除了换行符外
(ab|cd)                      ab或cd
[abc]                         a.b或c   
[^abc]                         除了a.b或c外的任意字符
[a-z]                         a到z
[^a-z]                         除了a到z外的任意字符
[a-e[m-p]]                 a到e或m到p                
[a-e&&[c-p]]             a到e与c到p的交集                 
\d                             一位数字,等同[0-9]
\D                            一位非数字
\w                            单词字符(任何字母,数字或下划线字符,即[a-z[A-Z][0-9] _ ])         
\W                           非单词字符
\s                         空白字符
\S                         非空白字符
p*                         0或多次出现模式p
p+                         1次或多次出现模式p
p?                         0或1次出现模式p
p{n}                        正好出现n次模式p
p{n,}                         至少出现n次模式p
p{n,m}                         n到m(不包含)次出现模式p
\p{P}                         一个标点字符!"#$%&’()*+,-./:;<=>?@[\]^_‘{|}~

示例1:社会安全号
  "111-22-3333".matches("[\\d]{3}-[\\d]{2}-[\\d]{4}")     return true;
 示例2: 以偶数结尾
"124".matches("[\\d]*[02468]")   return true; 
示例3:假设电话号码模式是(XXX)XXXX-XXX,X是一位数字,且第一位不能为0
"(912)2819-421".matches("\\([1-9][\\d]{2}\\)[\\d]{4}-[\\d]{3}")   return true;
括号在正则表达式中是特殊字符,用于对模式分组,必须用\\( 或者\\)

示例4:标识符由字母,数字、下划线或美元符合组成,不能以数字开头(\w表示任何字母,数字,或下划线)

[a-zA-z_$][\\w$]*


3、替换和拆分字符串
String类用正则表达式来匹配、替换和拆分字符串的方法 
java.lang.String类的方法如下:
+matches(regex:String):boolean  如果字符串匹配模式,返回true
+replaceAll(regex:String,replacement:String):String 将所有匹配的子字符串替换为replacement变量中的字符串,并返回新的字符串
+replaceFirst(regex:String,replacement:String):String  将所有匹配的第一个子字符串替换为replacement变量中的字符串,并返回新的字符串
+split(regex:String):String[]    返回一个字符串数组,包含被匹配模式的分隔符拆分的子字符串
+split(regex:String,limit:int):String[]   除使用了limit参数控制模式应用的次数外,与前面的拆分方法相同。

示例:

"Java Java Java".replaceAll("v\\w","wi"));   结果为:Jawi  Jawi  Jawi 

"Java Java Java".replaceFirst("v\\w","wi")); 结果为:Jawi  Java Java

String[] tokens="hello2word3java".split("\\d");

tokens[0]=hello、tokens[1]=word、tokens[2]=java、

在+split(regex:String,limit:int):String[]  方法中,如果limit<=0, split(regex:String,limit:int)等同于split(regex:String),如果limit>0,最对匹配limit-1次。

"java1hello2word".split("\\d",0);拆分为:java,hello,word

"java1hello2word".split("\\d",1);拆分为:javahelloword

"java1hello2word".split("\\d",2);拆分为:java,helloword

"java1hello2word".split("\\d",3);拆分为:java,hello,word

"java1hello2word".split("\\d",4);拆分为:java,hello,word

默认情况下,所有的量词符都是贪婪的,这意味着它们会尽可能匹配最多次

"jaaavaa".replaceFirst("a+","R"));    显示jRvaa

可以通过在后面添加?来改变量词符的默认行为,这意味着它将匹配尽可能少的次数

"jaaavaa".replaceFirst("a+?","R");  显示jRaavaa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值