匹配符号
public class regExp {
//基本匹配符
@Test
public void Test(){
String content="a1_1c8.A B@ C";
String reg1="[a-z]"; //a-z任意一个字符
String reg2="(?i)abc"; //不区分大小写
String reg3="[0-9]"; //0-9任意一个数字
String reg4="[^a-z]"; //不包含a-z
String reg5="[^0-9]"; //不包含0-9
String reg6="[abcd]"; //abcd中任意一个字符
String reg7="[abcd]"; //abcd中任意一个字符
String reg8="\\D"; //非数字任意一个字符
String reg9="\\w"; //数字 字母 下划线
String reg10="\\W"; //非数字 字母 下划线
String reg11="\\s"; //空格 制表符
String reg12="."; //除\n之外所有
String reg13="\\."; //匹配.
Pattern pattern=Pattern.compile(reg13,Pattern.CASE_INSENSITIVE); //匹配不区分大小写
Matcher matcher = pattern.matcher(content);
while(matcher.find()){
System.out.println("找到:"+matcher.group(0));
}
}
//选择匹配符
@Test
public void Test00(){
String content="hanshunping 韩 含";
String regString="han|韩|含";
Pattern pattern=Pattern.compile(regString);
Matcher matcher = pattern.matcher(content);
while(matcher.find()){
System.out.println("找到:"+matcher.group(0));
}
}
//限定匹配
@Test
public void Test01(){
String content="111111aaaa";
//1{}
String regString1="1{1,5}"; //匹配1的个数[1,5]
//1+
String regString2="1+"; //匹配多个1
//1*
String regString3="1*"; //匹配0个或者多个1
//1?
String regString4="1a?"; //匹配1a或者1
Pattern pattern=Pattern.compile(regString1);
Matcher matcher = pattern.matcher(content);
while(matcher.find()){
System.out.println("找到:"+matcher.group(0));
}
}
//定位符
@Test
public void Test02(){
String content="1234abcd";
//以数字开头,后面接任意个字母
String regString1="^[0-9]+[a-z]*";
//以数字开头,小写字母结尾
String regString2="^[0-9]+[a-z]+$";
Pattern pattern=Pattern.compile(regString1);
Matcher matcher = pattern.matcher(content);
while(matcher.find()){
System.out.println("找到:"+matcher.group(0));
}
}
//分组
@Test
public void Test03(){
String content="1234abcd5678";
//组名g1 g2
String regString="(?<g1>\\d{2})(?<g2>\\d{2})";
Pattern pattern=Pattern.compile(regString);
Matcher matcher = pattern.matcher(content);
while(matcher.find()){
System.out.println("找到:"+matcher.group(0));
System.out.println("找到第一组:"+matcher.group("g1"));
System.out.println("找到第二组:"+matcher.group("g2"));
}
}
//非捕获分组
@Test
public void Test04(){
String content="韩顺平教育 韩顺平同学 韩顺平hello";
String regString="韩顺平(?:教育|同学|hello)";
String regString2="韩顺平(?=教育|同学)";
String regString3="韩顺平(?!教育|同学)";
Pattern pattern=Pattern.compile(regString3);
Matcher matcher = pattern.matcher(content);
while(matcher.find()){
System.out.println("找到:"+matcher.group(0));
}
}
}
应用实例
public class Use {
@Test
public void Test(){
//汉字
String content1="韩顺平教育";
String regString1="^[\u0391-\uffe5]+$";
//邮政编码 6位数字
String content2="666666";
String regString2="^[1-9]\\d{5}$";
//qq 数字开头,5位到10位数
String content3="666666";
String regString3="^[1-9]\\d{4,9}$";
//手机号码 以13 14 15 18 开头的11位数
String content="13245678910";
String regString="^1[3|4|5|8]\\d{9}$";
Pattern pattern=Pattern.compile(regString);
Matcher matcher = pattern.matcher(content);
if(matcher.find()){
System.out.println("满足格式");
}else{
System.out.println("不满足格式");
}
System.out.println(Pattern.matches(regString,content));
}
@Test
public void TestURL(){
String content="https://www.bilibili.com/video/BV1fh411y7R8/?p=894&spm_id_from=pageDriver&vd_source=0ca742e7be3fc6c5285297c3a62db52f";
/**
*1.匹配 https://
* ^((http|https)://)
*
* 2.匹配 www.bilibili.com
* ([\w-]+\.)+[\w-]+$
*
* 3.匹配 /video/BV1fh411y7R8/?p=894&spm_id_from=pageDriver&vd_source=0ca742e7be3fc6c5285297c3a62db52f
* [\w-]+(\/[\w-?=&/%.]*)?$
*/
String regString="^((http|https)://)([\\w-]+\\.)+[\\w-]+(\\/[\\w-?=&/%.]*)?$";
Pattern pattern=Pattern.compile(regString);
Matcher matcher = pattern.matcher(content);
if(matcher.find()){
System.out.println("满足格式");
}else{
System.out.println("不满足格式");
}
//整体匹配
System.out.println(Pattern.matches(regString,content));
}
//替换
@Test
public void replace(){
String content="hspedukjfahspedujefj;16551";
String regString="hspedu";
Pattern pattern = Pattern.compile(regString);
Matcher matcher = pattern.matcher(content);
String newContent = matcher.replaceAll("韩顺平教育");
System.out.println(newContent);
}
//反向引用
@Test
public void quoteReverse(){
String content="1221456666689412321-111222333 ";
//连续两个数字相同
String regString1="(\\d)\\1";
//连续5个相同数字 反向引用4次
String regString2="(\\d)\\1{4}";
//回文4位数
String regString3="(\\d)(\\d)\\2\\1";
//12321-111222333
String regString4="\\d{5}-(\\d)\\1{2}(\\d)\\2{2}(\\d)\\3{2}";
Pattern pattern = Pattern.compile(regString4);
Matcher matcher = pattern.matcher(content);
while(matcher.find()){
System.out.println("找到:"+matcher.group(0));
}
}
//结巴去重
@Test
public void removeMulti(){
String content="我..我...要学学学学...Java!";
String regString="\\.";
Pattern pattern = Pattern.compile(regString);
Matcher matcher = pattern.matcher(content);
//1.将.替换为""
content= matcher.replaceAll("");
//2.找到重复的
regString="(.)\\1+";
pattern=Pattern.compile(regString);
matcher=pattern.matcher(content);
//3.使用反向引用替换掉所有重复的
content=matcher.replaceAll("$1");
System.out.println("去重后:"+content);
//一句话的事儿
content = Pattern.compile("(.)\\1+").matcher(content).replaceAll("$1");
System.out.println(content);
}
//String类方法
@Test
public void String_method(){
//替换
String content="JDK1.3 JDK1.4";
content = content.replaceAll("JDK1\\.3|JDK1\\.4", "JDK");
System.out.println(content);
//匹配
String content2="13812345678";
if(content2.matches("1(36|38|39)\\d{8}")){
System.out.println("验证成功");
}else{
System.out.println("验证失败");
}
//分割
String conten3="123456#fjjfd_iso].";
String[] splits = conten3.split("#|//.|_");
for(String s:splits){
System.out.println(s);
}
}
//邮箱验证
@Test
public void TestMail(){
String content="hsp@souhu.com";
String regString="^[\\w]+@(([\\w]+)\\.)+[\\w]+$";
Pattern pattern = Pattern.compile(regString);
Matcher matcher = pattern.matcher(content);
if(matcher.find()){
System.out.println("匹配成功");
}else{
System.out.println("匹配失败");
}
}
//数字验证
@Test
public void TestNumber(){
String content="-0.123";
String regStr="^[-+]?([1-9]\\d*|0)(\\.\\d+)?$";
if(content.matches(regStr)){
System.out.println("匹配成功");
}else{
System.out.println("匹配失败");
}
}
//解析URL
@Test
public void explainURL(){
String content="http://www.souhu.com:8080/abc/index.htm";
String regStr="^([a-zA-Z]+)://([a-z.]+):(\\d+)[\\w-/]*/([\\w.]+)$";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
if(matcher.find()){
System.out.println("匹配成功"+matcher.group(0));
System.out.println("协议:"+matcher.group(1));
System.out.println("域名:"+matcher.group(2));
System.out.println("端口:"+matcher.group(3));
System.out.println("文件名:"+matcher.group(4));
}else{
System.out.println("匹配失败");
}
}
}