正则表达式

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

©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页