JAVA中的正则表达式学习
前言:
经常会需要编写代码来验证用户输人,比如验证输入是否是一个数字,是否是一个全部小写的字符串,或者社会安全号。如何编写这种类型的代码呢?一个简单而有效的做法是使用正则表达式来完成这个任务。
**正则表达式 ( regular expression,简写为regex)**是一个字符串,用来描述匹配一个字符串集合的模式。对于字符串处理来说,正则表达式是一个强大的工具。可以使用正则表达式来匹配、替换和拆分字符串。
正则表达式的关键————正则表达式
正则表达式用语句“ String”.matches(“正则表达式”)
System.out.print("java is fun".matches("java.*"));
运行结果为:
true
这条语句的理解就是判断前面的字符串是否以“java”开头,后面的“.*”表示java后面可以跟任意个字符串。
注意:java中反斜杠\需要用\\来表示
可以用括号将模式分组
演示:
System.out.print("ten".matches("t(en|im)"));
\\true
System.out.print("abab".matches("(ab){2}"));
\\true
实例演示
System.out.print("e".matches("[ae|cd]"));
\\true
System.out.print("w".matches("[xyw]"));
\\true
System.out.print("xy".matches("[xyw]{2}"));
\\true
前面的[xyz]表示字符串中字符的范围,{2}代表匹配范围为前两位
System.out.print("xyqqqqqq".matches("[xyw]{2}"));
\\false
因为“xyqqqqqqq”只有前两位匹配了但后面的多位都不匹配
System.out.print("xyqqqqqq".matches("[xyw]{2}.*"));
\\true
加上“.*”后只判断{n}中前n位匹配即可
正则表达式的实际应用
1.社会安全号码
社会安全号码的模式是xxx-xx-xxx,其中x是一位数字。则社会安全号码的正则表达式为[\d]{3}-[\d]{2}-[\d]{3}
例如:
System.out.print("123-45-678".matches("[\\d]{3}-[\\d]{2}-[\\d]{3}"));
\\true
System.out.print("1234-45-678".matches("[\\d]{3}-[\\d]{2}-[\\d]{3}"));
\\false
2.判断以偶数结尾
System.out.print("1234".matches("[\\d]*[02468]"));
\\true
System.out.print("1237".matches("[\\d]*[02468]"));
\\false
电话号码的模式是(xxx)xxx-xxxx,x表示数字,并且第一位不能是0,则电话号码的正则表达式可以表示为
\([1-9][\d]{2}\)[\d]{3}-[\d]{4}
**注意:**括号(和)在正则表达式是特殊字符,用于模式分组。为了在正则表达式表示字面值(和),需要用\(和\)
System.out.print("(091)123-1234".matches(" \\([1-9][\\d]{2}\\)[\\d]{3}-[\\d]{4}"));
\\false
\\([1-9][\\d]{2}\\)[\\d]{3}-[\\d]{4}
\\true
正则表达式在字符串替换拆分中的应用
String类不仅包含matches方法,也包含repalceAll、replaceFirst和split方法,用于替换和拆分字符串。
replaceAll方法替换所有的字符串,
System.out.print("Java java java".replaceAll("v\\w","iv"));
\\Jaiv jaiv jaiv
replaceFirst方法替换第一个匹配的字符串
System.out.print("Java java java".replaceFirst("v\\w","iv"));
\\Jaiv java java
.split(regex,limit),limit参数决匹配regex模式多少次,如果limit<=0,就相当于split(regex)
以上便是我此次学习Java正则表达式的收获