Java-正则表达式
1.正则表达式
正则表达式就是字符串,按照一定的规则用符号来表示的字符串并操作字符串.。这些符号对应于底层的符号
好处:简化代码量,降低程序的可读性。
注意:"\"的使用,少部分的是"\\",单个“\”使用转义后面的字符,大部份是"\\.",转义出"\",再转出"."符号。
即常用第二种情况,出现两个"\\"
- 正则表达式定义了字符串的模式。
- 正则表达式可以用来搜索、编辑或处理文本。
- 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
- Java正则表达式和Perl的是最为相似的。
java.util.regex包主要包括以下三个类:
- Pattern类:
pattern对象是一个正则表达式的编译表示。Pattern类没有公共构造方法。要创建一个Pattern对象,你必须首先调用其公共静态编译方法,它返回一个Pattern对象。该方法接受一个正则表达式作为它的第一个参数。
- Matcher类:
Matcher对象是对输入字符串进行解释和匹配操作的引擎。与Pattern类一样,Matcher也没有公共构造方法。你需要调用Pattern对象的matcher方法来获得一个Matcher对象。
- PatternSyntaxException:
PatternSyntaxException是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
正则表达式匹配功能:
boolean matches(String regex);//该字符串是否匹配给定的正则表达式。
public static void main(String []args)
{
String s="15833334444"; //检查手机号码
//[xy]为x或y,[0-9]为0到9中某一个,{9}为重复9次
boolean b=s.matches("1[358][0-9]{9}");
boolean b2=s.matches("1[358]\\d{9}");//其中\\d等价于[0-9]
}
正则表达式切割功能:
注意:Java的正则表达式中 "." 代表任意单个字符。
String [] split(String regex);//根据给定的regex切割字符串
String s1="zhangshan liao hq";
String []ss1=s1.split(" +");//以空格(" ")来切割"+"表示重复一次或以上
String s2="1234.3433.5354";//
String []ss2=s2.split("\\.");//以“.”来切割,其中“\\”表示转义出“\”,再转出"."
//Java用括号()来定义一个组,且自动为其编号【从1开始】,"\\n"表示使用第n个组
String s3="zhangshankkliaoxxxxxhq"
//"kk"和"xxxxx"来切割这个字符串,
//(.)表示一个包含任意字符"."的捕获组,"\\1"表示指向第一个组,"+"重复一次以上
String s4=s3.split("(.)\\1+");
正则表达式替换功能:
String replaceAll(String regex,String replacement);//通过给定的正则表达式regex的地方,用replacement替换
String replaceFirst(String regex,String replacement);//通过给定的正则表达式regex的第一个地方,用replacement替换
//如何将"kkkkk"替换为"k","xxx"替换为"x"
String s="zhangshankkkkkliaoxxxhq";
String s=s.replaceAll("(.)\\1+","$1");//"$"表示引用前面的字符串中某个组即(.)
//"15800001111"变成"158****1111"
String s1="15800001111";
String s1=s1.replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2");
//可将电话号码分成两个捕获组
//158对应(\\d{3})和1111对应(\\d{4}),再用$1和$2分别指向它们
正则表达式获取功能:
String的matches,split,replaceAll方法其实是调用底层的Matcher类对应的方法。
String s="aaaaab";
boolean b=s.matches("a*b");
上一句等价于下面:
String regex="a*b";
Pattern p = Pattern.compile
("a*b");//将字符串"a*b"封装成pattern对象
Matcher m = p.matcher
("aaaaab");//调用Matcher对象,并将操作的“aaaab”传进来
boolean b = m.matches
();//调用了matcher的匹配方法matches();
//如何找出该字符中三个字母的单词如"jia"
String str="da jia hao,ming tian bu fang jia!";
String regex="\\b[a-z]{3}\\b";
//任意小写字母组成的3个字母的单词,\\b表示该单词的边界,即将该单词与前后的字符分开
//1,将正则封装成对象
Pattern p=Pattern.complie(regex);
//2,将正则对象获取匹配器对象
Matcher m=p.matcher(str);
//使用Matcher对象的方法对字符串进行操作
//既然要获取三个字母组成的单词,则可以使用它的find()方法
//find()只是找到第一个符合条件的单词,
//用group()方法获取,find()方法找到的单词
while(m.find())
{
System.out.println(m.group());//获取匹配的子序列
}