正则表达式经常用来验证用户输入。正则表达式是一个字符串,用来描述匹配一个字符串集合的模式,通过使用正则表达式来匹配、替换和拆分字符串。
-
匹配字符串
使用String类的matches方法,它不仅可以匹配一个固定的字符串,还可以匹配符合一个模式的字符串集。
例如:”Java”.matches(“Java”) returns true.
-
正则表达式语法
正则表达式由字面值字符和特殊字符组成,如下表。
注意:不要在重复量词符中使用空白。
1.示例1
社会安全号的模式是xxx-xx-xxx,其中x是一位数字,其正则表达式可以描述为
[\\d]{3}-[\\d]{2}-[\\d]{4}
2.示例2
偶数以数字0、2、4、6或8结尾。偶数的模式可以描述为
[\\d]*[02468]
3.示例3
电话号码的模式是(xxx)xxx-xxxx,x表示一位数字,并且第一位数字不能为0, 则其正则表达式为 \\([1-9][\\d]{2}\\) [\\d]{3}-[\\d]{4}
为了表示”()”,必须使用\\(和\\)。
4.示例4
任何字符串的正则表达式为”.*”?
-
替换和拆分字符串
- replaceAll方法替换所有匹配的子字符串
例如:System.out.println(“Java Java Java”.replaceAll(“v\\w”,”wi”));
显示:Jawi Jawi Jawi
2.replaceFirst方法替换第一个匹配的子字符
例如:System.out.println(“Java Java Java”.replaceFirst(“v\\w”,”wi”));
显示:Jawi Java Java
注意:默认情况下所有量词符会尽可能匹配最多次,例如下面语句显示JRvaa,因为第一个匹配成功的是aaa。
System.out.println(“Jaaavaa”.replaceFirst(“a+”,”R”));
可以通过在后面添加“?“,将变成匹配尽可能少的次数,例如下面语句将显示JRaavaa,因为第一次匹配成功的是a。
System.out.println(“Jaaavaa”.replaceFirst(“a+?”,”R”));
3.split(regex)方法使用匹配的分隔符将一个字符串拆分为子字符串。
例如:String[] tokens=“Java1HTML2Perl“.split(\\d);
将拆分为Java、HTML、Perl,并且保存在tokens[0],tokens[1],tokens[2]中。
4.split(regex,limit)方法中,limit参数确定模式匹配多少次。如果limit<=0,split(regex,limit)等同于split(regex)。如果limit>0,模式最多匹配limit-1次。
下面是一些示例: