正则表达式:用来操作字符串的一些规则。 好处:对字符串的复杂操作变简单。 坏处:阅读性差 特点:将字符串操作的代码用一些符号来表示
组:用小括号标示,每定义一个小括号,就是一个组,而且有自动编号,从1开始。 只要使用组,对应的数字就是使用该组的内容。别忘了,数组要加\\。 (aaa(wwww(ccc))(eee))技巧,从左括号开始数即可。有几个左括号就是几组。
正则表达式的四种常见操作: 1. 匹配:其实用的就是String类中的matches方法。 2. 用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。 Stringreg = "[1-9][0-9]{4,14}" 例; public staticvoid checkQQ() { String qq = "123a454"; //第一步:数据源
String regex ="[1-9]\\d{4,14}"; //第二步:规则第一位代表1-9;第二位可以是正整数,可以是4-14位
boolean flag = qq.matches(regex); //第三步:将数据源进行匹配 if(flag) System.out.println(qq+"...isok"); else System.out.println(qq+"...不合法");
}
2,切割:其实用的就是String类中的split方法。
public staticvoid splitDemo(String str,String reg) {
String reg = " +";//第一步:初始化切割的规则,按照多个空格来进行切割 String[] arr = str.split(reg); //第二步执行切割 System.out.println(arr.length); for(String s : arr) { System.out.println(s); } }
3,替换:String replaceAll(regex,str);如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组。
public staticvoid replaceAllDemo(String str,String reg,String newStr) { str = str.replaceAll(reg,newStr);
System.out.println(str); }
class RegexDemo { public static voidmain(String[] args) { String str1 ="erkktyqqquizzzzzo"; replaceAllDemo(str1,"(.)\\1+","$1");//将叠词替换成$. //将重叠的字符替换成单个字母。zzzz->z
}
4,获取: 1),先要将正则表达式编译成正则对象。使用的是Pattern中静态方法 compile(regex); 2),通过Pattern对象获取Matcher对象。 Pattern用于描述正则表达式,可以对正则表达式进行解析。 而将规则操作字符串,需要从新封装到匹配器对象Matcher中。 然后使用Matcher对象的方法来操作字符串。 如何获取匹配器对象呢? 通过Pattern对象中的matcher方法。该方法可以正则规则和字符串想关联。并返回匹配器对象。 步骤: 1,将正则表达式封装成对象。 2,让正则对象和要操作的字符串相关联。 3,关联后,获取正则匹配引擎。 4,通过引擎对符合规则的子串进行操作,比如取出。
importjava.util.regex.*;
class RegexDemo2 { public static voidmain(String[] args) { getDemo(); } public static voidgetDemo() { String str = "ming tian jiu yao fangjia le ,da jia。"; System.out.println(str); String reg = "\\b[a-z]{4}\\b";
//第一步:将规则封装成对象。 Pattern p = Pattern.compile(reg);
//第二步:让正则对象和要作用的字符串相关联。获取匹配器对象。 Matcher m = p.matcher(str);
while(m.find()) 第三步:将规则作用到字符串上,并进行符合规则的子串查找。 { System.out.println(m.group());//第四步:用于获取匹配后结果。
System.out.println(m.start()+"...."+m.end());
} } }
|