我们都知道,String类封装了很多关于操作字符串的许多方法,且在我们日常的程序编写过程中,经常需要对字符串进行处理。
当我们要对一个字符串的内容进行某些限制或者操作(如判断用户名是否符合命名规则、邮箱格式是否正确),使用正则表达式可以帮我们很轻松的完成对字符串的相关操作。
使用正则表达式可以完成减轻代码的复杂度,很复杂的处理过程有时只需交给正则表达式处理,使得程序更为简练。但与此同时,由于正则表达式功能封装性太强,不易一下子读懂,所以记得要备注清楚正则表达式的说明。
字符串的正则表达式首先会被编译为此Pattern类的实例,我们可以查看API Pattern类进行正则表达式的构造。
学习正则表达式,多查API 多练习即可:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 正则表达式,请参照Pattern等相关API
* @author
*
*/
public class PatternTest {
public static void main(String[] args) {
//matches1();
//matches2();
//matches3();
//matches4();
//matches5();
matches6();
}
//应用Pattern类来处理正则表达式
private static void matches6() {
String str = "wfs 897f sf sdf 78sdf sdf iopo tyr";
//找到3个字母的单词 \b为单词边界的匹配,可查阅Pattern 关于边界的说明。
String regex = "\\b\\w{3}\\b";
Pattern p = Pattern.compile(regex);
//获取匹配器
Matcher m = p.matcher(str);
//进行一次次匹配,如果匹配,则打印出结果 matches()是对整个字符串的匹配。
while(m.find()){
System.out.println(m.group());
//当前匹配开起始字母索引值
System.out.println(m.start());
//当前匹配开结束字母索引值
System.out.println(m.end());
}
}
//对字符串进行替换
private static void matches5() {
String str = "wanggzhing22234lkf2433lkkj";
//将其中的数字去除
String regex1 = "\\d+";
//将其中的叠词dd 222等替换为单个
String regex2="(.)\\1+";
System.out.println(str.replaceAll(regex1, ""));
//$用地取上一个正则表达式中的组
System.out.println(str.replaceAll(regex2, "$1"));
}
//对字符串进行分解 组的运用
private static void matches4() {
//以点来分解
//String str = "com.java.pattern";
//String regex ="\\.";
//对不规则的点来分解
//String str = "com..java.....pattern.test";
//String regex ="\\.+";
//分组的使用
String str = "ja33vafoi....usdfff4::45nnsassd";
// . 代表任意字符 (.)将其进行分组, \1表示第一组的内容
//以下表达式表示同样的内容出现过两次以上
String regex ="(.)\\1+";
String[] arr = str.split(regex);
for(String s:arr) {
System.out.println(s);
}
}
//Greedy 数量词 ,指定正则表达式出现次数的判断
private static void matches3() {
// ?代表0次或1次,+代表1次或多次,*代表0或多次
//{x} 刚好出现x次, {x,}至少出现x次,{x,y}出现x次以上但不超过y
String str = "234352";
//定义规则,数字可以出现一次或者多次。
//String regex = "\\d?";
String regex = "\\d{5,15}";
boolean result = str.matches(regex);
System.out.println(result);
}
//预定义类,顾名思义,预定义类就是将一些常用的正则给简化了。
private static void matches2() {
// . 表示任意符,
// \d 表示数字:[0-9]
// \D 非数字: [^0-9]
// \s 空白字符:[ \t\n\x0B\f\r]
// \S 非空白字符:[^\s]
// \w 单词字符:[a-zA-Z_0-9]
// \W 非单词字符:[^\w]
String str = "3_W";
String regex = "\\d\\w\\w";
//String regex = "\\d\\w+";
boolean result = str.matches(regex);
System.out.println(result);
}
//字符类
private static void matches1() {
String str = "aA";
// String str = "ab";
// 指定正则表达式 [] 代表一个字符,[abc]表示这个字符可以是abc中的任意一个。
//[A-Z]表示A-Z的任意一个字符。
String regex = "[abc][A-Z]";
boolean result = str.matches(regex);
System.out.println(result);
}
}