package com.spring.test;
/*
正则表达式:其实一种规则,有自己特殊的应用。
针对于字符串进行操作。
正则就是用于操作字符串的规则。
其中是以一些符号来表示规则。
你可以理解为:其实符号就是对应了底层的代码,不用在书写代码,而是使用一些符号来表示,简化了书写。
正则可以简化对字符串的复杂。
正则的功能:
1,匹配
使用的String中的matches方法。
2,切割。
使用的是String类中的split方法。
3,替换。
String类中的replaceAll方法。
4,获取。
使用的是用正则对象Pattern 和匹配器Matcher
范例:
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
步骤:
1,先将正则表达式编译成正则对象。使用的是Pattern类一个静态的方法。compile(regex);
2,让正则对象和要操作的字符串相关联,通过matcher方法完成,并返回匹配器对象。
3,通过匹配器对象的方法将正则模式作用到字符串上对字符串进行针对性的功能操作
练习:我...我...我我...我要..要要..要要..学..学学.学学...编..编编..编编..程程..程..程程..程
要求还原成 我要学编程。
练习:匹配e-mail地址,定义e-mail规则。
*/
import java.util.regex.*;
class RegexDemo
{
public static void main(String[] args)
{
getDemo();
}
public static void getDemo()
{
String str = "da jia zhu yi le,ming tian bu fang jia,xie xie!";
//想要获取由3个字母组成的单词。
//刚才的功能返回的都是一个结果,只有split返回的是数组,但是它是把规则作为分隔符,不会获取符合规则的内容。
//这时我们要用到一些正则对象。
String reg = "\\b[a-z]{3}\\b";
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(str);
while(m.find())
{
System.out.println(m.start()+"...."+m.end());
System.out.println("sub:"+str.substring(m.start(),m.end()));
System.out.println(m.group());
}
// System.out.println(m.find());//将规则对字符串进行匹配查找。
// System.out.println(m.find());//将规则对字符串进行匹配查找。
// System.out.println(m.group());//在使用group方法之前,必须要先找,找到了才可以取。
}
public static void replaceDemo()
{
String str = "sdaaafghcccjkqqqqqql";
String s = str.replaceAll("(.)\\1+","$1");//$ 可以获取到该方法中正则实际参数中的某一个存在的组 $组编号即可。
System.out.println(str+":"+s);
String nums = "wser127372tyuiopd6226178909876789fghjk";
String s1 = nums.replaceAll("\\d+","*");
System.out.println(nums+":"+s1);
}
public static void splitDemo2()
{
String str = "sdqqfgkkkhjppppkl";//sd fg hj kl
String[] arr = str.split("(.)\\1+");//为了提高规则复用,用()进行封装,每一个括号都有一个编号,从1开始,
//为了复用这个规则。可以通过编号来完成该规则的调用。需要对编号数字进行转义。
// \\1就代表获取1组规则。
for(String s : arr)
{
System.out.println(s);
}
}
public static void splitDemo()
{
String str = "aa.bb.cc";
str = "-1 99 4 23";
String[] arr = str.split(" +");
for(String s : arr)
{
System.out.println(s);
}
}
public static void checkTel()
{
String tel = "25800001111";
String reg = "1[35]\\d{9}";//在字符串中,定义正则出现\ 要一对出现。
boolean b= tel.matches(reg);
System.out.println(tel+":"+b);
}
//演示匹配功能
public static void method()
{
String str = "foo";
String reg = "fo{2}";
boolean b= str.matches(reg);
System.out.println("str:"+b);
}
public static void checkQQ2()
{
String qq = "12345";
String reg = "[1-9][0-9]{4,14}";
boolean b = qq.matches(reg);
System.out.println("b="+b);
}
//校验QQ号。要求:必须是5~15位数字,0不能开头。
public static void checkQQ(String qq)
{
int len = qq.length();
if(len>=5 && len <=15)
{
if(!qq.startsWith("0"))
{
try
{
long l = Long.parseLong(qq);
System.out.println("qq:"+l);
}
catch (NumberFormatException e)
{
System.out.println("出现非法字符");
}
}
else
System.out.println("不可以0开头");
}
else
System.out.println("QQ号长度错误");
}
}
评论10
最新资源