正则表达式浅析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Double_Hill/article/details/52723997
/*
 * 正则表达式:用于操作字符串的一个规则
 * 
 * 预定义字符类 
        . 任何字符(与行结束符可能匹配也可能不匹配) 
        \d 数字:[0-9] 
      \D 非数字: [^0-9] 
\s 空白字符:[ \t\n\x0B\f\r] 
\S 非空白字符:[^\s] 
\w 单词字符:[a-zA-Z_0-9] 
\W 非单词字符:[^\w] 

   Greedy 数量词 
X? X,一次或一次也没有 
X* X,零次或多次 
X+ X,一次或多次 
X{n} X,恰好 n 次 
X{n,} X,至少 n 次 
X{n,m} X,至少 n 次,但是不超过 m 次 


字符类(范围词) 
[abc] a、b 或 c(简单类) 
[^abc] 任何字符,除了 a、b 或 c(否定) 
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) 
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)  [a-dm-p]
[a-z&&[def]] d、e 或 f(交集)
单词边界匹配器
   \b 
 
 */
public class RegexDemo {
    
public static void main(String[] args) {
/*
* 匹配
*/

String source= ""; //匹配源数据
String reg = "1[34578]\\d{9}";  //验证手机号
String mail="[a-zA-Z1-9]\\w{5,17}@[a-zA-Z0-9]{2,}(\\.(com|cn|net))){1,2}";//邮箱
String reg1 = "0\\d{2,3}-[0-9]\\d{6,7}";//验证固话
System.out.println(source.matches(reg1)?"验证通过":"验证失败");
/*
* 切割
*/

String source2 = "正   则 表     达式";
String reg2 =" +";//取出空格
String[] datas = source2.split(reg2);
System.out.println(Arrays.toString(datas));

String source3 = "我正正正则表达式式";//重叠词
String reg3 = "(.)\\1+";  // ()代表分组,\1代表第一组的内容
String[] datas3 = source3.split(reg3);
System.out.println(Arrays.toString(datas3));
/*
* 替换
*/

String source4 = "手机号是:13444555555";
String reg4 = "1[34578]\\d{9}";
source4 = source4.replaceAll(reg4, "***********");
System.out.println("替换后:"+source4);

String source5 = "正正正则则表达达式";
String reg5 = "(.)\\1+";
source5 = source5.replaceAll("(.)\\1+", "$1");//$符号表示引用的第一组内容
System.out.println("替换后:"+source5);
/*
* 查找
* 需要正则对象,
* Pattern p = Pattern.compile("a*b");  (正则对象)
* Matcher m = p.matcher("aaaaab"); (匹配器对象)
* boolean b = m.matches();
*/

//找出三个字母组成的单词
String source6 = "zheng ze biao  da  shi shi  he  he  he wos ddd";
String reg6 = "\\b[a-zA-Z]{3}\\b"; // \b是单词边界匹配器
Pattern p = Pattern.compile(reg6);
Matcher m = p.matcher(source6);
while(m.find()){//类似迭代的hasnext
System.out.println(m.group());//类似迭代的next
}


}
}

猜你喜欢

转载自blog.csdn.net/Double_Hill/article/details/52723997