/*
正则表达式:用于操作字符串数据的规则。
这种规则都用一些符号来标识,简化了代码的书写。
但是一但书写的比较复杂,阅读性就非常差!!!
1,匹配。可以使用String matches(string),可以使用Matcher对象的matcher()方法
2,查找。使用Pattern对象,以及Matcher对象。
3,分割。使用String的split方法。
4,替换。replaceAll
需求:
校验QQ号。
1,5-15位。
2,0不能开头。
3,不可以出现非数字。
练习:将字符串中所有的手机号码,QQ号码。替换#。屏蔽敏感信息。
练习:匹配email地址。
练习:"192.168.1.254 10.10.10.10 3.3.3.3 127.105.10.2"
要求,对四个IP地址进行排序。
*/
import java.util.regex.*;
class Regex
{
public static void main(String[] args)
{
// splitString();
// replaceString();
checkMail();
}
// 练习:匹配email地址。
public static void checkMail()
{
String mail = "abc1@sina.com";
// String mailreg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
String mailreg = "\\w+@\\w+(\\.\\w+)+";//1@1.1
System.out.println("mail:"+mail.matches(mailreg));
}
// 使用规则对字符串中的部分进行替换
public static void replaceString()
{
String str = "r111waqqfszzdwssse";
//将叠词替换成#.
//str = str.replaceAll("(.)\\1+","#");//把重复元素替换成#
//将叠词替换成叠词中一个。
str = str.replaceAll("(.)\\1+","$1");//把重复元素换成一位当前重复元素 qq-->q
System.out.println("str="+str);
}
// 切割字符串通过正则规则
public static void splitString()
{
// String str = "haha.hehe.heihei";
String str = "r111waqqfszzdwssse";
//将规则封装成组,通过()的形式完成,封装组的好处就是可以重复使用该组中的规则。
// 可以通过\n的反向引用指定组的序号。
String[] arr = str.split("(.)\\1+");//qq 校验后一位是否和前一位重复
for(String s : arr)
{
System.out.println(s);
}
}
// 使用正则校验QQ
public static void checkQQ()
{
String qq = "1234569";
String qqreg = "[1-9]\\d{4,14}";
System.out.println("qq:"+qq.matches(qqreg));
}
// 使用正则校验手机号码
public static void checkTel()
{
String tel = "15801659340";
String telreg = "1[35]\\d{9}";
System.out.println("tel:"+tel.matches(telreg));
}
// 取出字符串中的手机号码。
public static void getTels()
{
String tels = "sd15801659340fs13801659340gsf15901659340sf";
//取出字符串中所有的电话号码。
/*
1,将正则规则封装成Pattern对象。通过Pattern的compile方法。
2,调用Pattern对象的matcher方法让正则和字符串相关联,并将该规则作用于该字符串。
因为匹配的内容有可能不唯一,所以将这些匹配的结果进行封装,返回一个匹配器对象Matcher
3,可以使用匹配器的方法,对符合规则的内容进行操作。如find():查找是否有下一个,group():取出下一个;
*/
Pattern p = Pattern.compile("1[35]\\d{9}");
Matcher m = p.matcher(tels);
while(m.find())
{
System.out.println(m.group());
}
}
public static boolean validateQQ(String qq)
{
// qq = qq.trim();
int len = qq.length();
if(!(len>=5 && len<=15))
{
// System.out.println("长度错误");
return false;
}
if(qq.startsWith("0"))
{
// System.out.println("0不可以开头");
return false;
}
try
{
long l = Long.parseLong(qq);
// System.out.println("qq是正确的");
return true;
}
catch (NumberFormatException e)
{
// System.out.println("出现非法字符");
return false;
}
正则表达式:用于操作字符串数据的规则。
这种规则都用一些符号来标识,简化了代码的书写。
但是一但书写的比较复杂,阅读性就非常差!!!
1,匹配。可以使用String matches(string),可以使用Matcher对象的matcher()方法
2,查找。使用Pattern对象,以及Matcher对象。
3,分割。使用String的split方法。
4,替换。replaceAll
需求:
校验QQ号。
1,5-15位。
2,0不能开头。
3,不可以出现非数字。
练习:将字符串中所有的手机号码,QQ号码。替换#。屏蔽敏感信息。
练习:匹配email地址。
练习:"192.168.1.254 10.10.10.10 3.3.3.3 127.105.10.2"
要求,对四个IP地址进行排序。
*/
import java.util.regex.*;
class Regex
{
public static void main(String[] args)
{
// splitString();
// replaceString();
checkMail();
}
// 练习:匹配email地址。
public static void checkMail()
{
String mail = "abc1@sina.com";
// String mailreg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
String mailreg = "\\w+@\\w+(\\.\\w+)+";//1@1.1
System.out.println("mail:"+mail.matches(mailreg));
}
// 使用规则对字符串中的部分进行替换
public static void replaceString()
{
String str = "r111waqqfszzdwssse";
//将叠词替换成#.
//str = str.replaceAll("(.)\\1+","#");//把重复元素替换成#
//将叠词替换成叠词中一个。
str = str.replaceAll("(.)\\1+","$1");//把重复元素换成一位当前重复元素 qq-->q
System.out.println("str="+str);
}
// 切割字符串通过正则规则
public static void splitString()
{
// String str = "haha.hehe.heihei";
String str = "r111waqqfszzdwssse";
//将规则封装成组,通过()的形式完成,封装组的好处就是可以重复使用该组中的规则。
// 可以通过\n的反向引用指定组的序号。
String[] arr = str.split("(.)\\1+");//qq 校验后一位是否和前一位重复
for(String s : arr)
{
System.out.println(s);
}
}
// 使用正则校验QQ
public static void checkQQ()
{
String qq = "1234569";
String qqreg = "[1-9]\\d{4,14}";
System.out.println("qq:"+qq.matches(qqreg));
}
// 使用正则校验手机号码
public static void checkTel()
{
String tel = "15801659340";
String telreg = "1[35]\\d{9}";
System.out.println("tel:"+tel.matches(telreg));
}
// 取出字符串中的手机号码。
public static void getTels()
{
String tels = "sd15801659340fs13801659340gsf15901659340sf";
//取出字符串中所有的电话号码。
/*
1,将正则规则封装成Pattern对象。通过Pattern的compile方法。
2,调用Pattern对象的matcher方法让正则和字符串相关联,并将该规则作用于该字符串。
因为匹配的内容有可能不唯一,所以将这些匹配的结果进行封装,返回一个匹配器对象Matcher
3,可以使用匹配器的方法,对符合规则的内容进行操作。如find():查找是否有下一个,group():取出下一个;
*/
Pattern p = Pattern.compile("1[35]\\d{9}");
Matcher m = p.matcher(tels);
while(m.find())
{
System.out.println(m.group());
}
}
public static boolean validateQQ(String qq)
{
// qq = qq.trim();
int len = qq.length();
if(!(len>=5 && len<=15))
{
// System.out.println("长度错误");
return false;
}
if(qq.startsWith("0"))
{
// System.out.println("0不可以开头");
return false;
}
try
{
long l = Long.parseLong(qq);
// System.out.println("qq是正确的");
return true;
}
catch (NumberFormatException e)
{
// System.out.println("出现非法字符");
return false;
}