java 正则 d 1_java之正则表达式的使用1

正则表达式:

主要作用:

a.匹配

b.切割

c.替换

d.获取

1.反斜杠和转义字符

废话不多说,直接上demo

public static voidmain(String[] args) {//TODO Auto-generated method stub

String phoneNum= "28516885191";

isPhoneNum(phoneNum);

}//13800000876

public static voidisPhoneNum(String phoneNum){

String regex= "1[34578][0-9]{9}";

String regex2= "1[34578]\\d{9}";boolean isPhoneNum=phoneNum.matches(regex);

System.out.println("is phoneNum?  "+isPhoneNum);

}

总结

/*

* 正则表达式匹配数字的规则,可以用[0-9]和   \d来表示,

* 但在java语言中,\在字符串中本身是转义字符, 也就是说\不是字符本身的反斜杠\,而是有特殊意义的(转义)

* 正则中,\d,是将普通反斜杠和d连一块,表示数字 (也就是说,正则中的\不是转义字符)。所以java语言中,我们不能直接用\d来表示数字,

* 需要这样:\\d    前一个反斜杠,是转义字符,将第二个反斜杠转义字符转译成 普通的字符反斜杠

*

* */

组的使用及切割:

public static voidmain(String[] args) {//TODO Auto-generated method stub

String string= "andittttbobmmmmmmmmmmmcyanxxdenim";

String regex= "(.)\\1+";

String[] strings=string.split(regex);for(String string2 : strings) {

System.out.println("name: "+string2 );

}

}

output:

name: andi

name: bob

name: cyan

name: denim

总结:

在表达式 ((A)(B(C))) 中,存在四个组:

1 ((A)(B(C)))

2  (A)

3 (B(C))

4 (C)

组零始终代表整个表达式

3.组的使用及替换:

public static voidmain(String[] args) {

String str1_1= "andittttbobmmmmmmmcyanxxdenim";//源字符串

String regex1= "(.)\\1+";//目标字符串: andi#bob#cyan#denim

String str1_2= str1_1.replaceAll(regex1, "#");

System.out.println("str1_2: "+str1_2);

String str2_1= "andittttbobmmmmmmmcyanxxdenim";//源字符串

String regex2= "(.)\\1+";//目标字符串: anditbobmcyanxdenim

String str2_2= str2_1.replaceAll(regex2, "$1");

System.out.println("str2_2: "+str2_2);

}

output:

str1_2: andi#bob#cyan#denim

str2_2: anditbobmcyanxdenim

总结:在String.replaceAll()方法中,使用$符号来让第二个参数使用第一个参数的值

4.1切割:

public static voidmain(String[] args) {//TODO Auto-generated method stub

String path1= "com/westward/p/5399166";//源字符串//目标字符串com.westward.5399166

String regex= "/";

String path2= path1.replaceAll(regex, ".");

System.out.println(path2);

}

output:

com.westward.p.5399166

4.2切割:

public static voidmain(String[] args) {//TODO Auto-generated method stub

String str= "15800001111";//源字符串//目标字符串:158****1111;

String regex= "(\\d{3})\\d{4}(\\d{4})";

String str2= str.replaceAll(regex, "$1****$2");

System.out.println("str2: "+str2 );

}

output:

str2: 158****1111

5.获取

public static voidmain(String[] args) {//TODO Auto-generated method stub

String str= "hah,cheng wei da shen zhi lu!";

String regex= "\\b\\w{3}\\b";

Pattern pattern= Pattern.compile(regex);//将正则表达式封装为Pattern类的对象

Matcher matcher= pattern.matcher(str);//正则对象匹配字符串,生成Matcher对象

System.out.println(str);while (matcher.find()) {//字词匹配一个,判断有无符合

System.out.println(matcher.group()+";startindex: "+ matcher.start()+ " ,endindex: "+matcher.end() );//。group:取出匹配的 .start:匹配的下标(首字母下标,尾字母下标+1), .end()类似.start()

}

}

正则表达式的一些小练习:

public static voidmain(String[] args) {

System.out.println("sayRight() run:");

sayRight();

System.out.println("sortIp() run:");

sortIp();

System.out.println("checkEmail() run:");

checkEmail();

}public static voidsayRight(){//1.切割

String string= "我我...我我...我我我要...要要要要......要要要要...学学学学学学......学学编编.......编编编编...编..程程....程程";

string= string.replaceAll("\\.+", "");

System.out.println(string);//2.替换

string= string.replaceAll("(.)\\1+", "$1");

System.out.println(string);

}//Example:192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55//对上面的ip进行排序,升序

public static voidsortIp(){

String string1= "192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55";//1.为了保持位数一直,首先数字前加两个0

string1= string1.replaceAll("(\\d+)", "00$1");

System.out.println(string1);//00192.00168.0010.0034 00127.000.000.001 003.003.003.003 00105.0070.0011.0055//2.替换为位数一致

string1= string1.replaceAll("0*(\\d{3})", "$1");//对于00192,0*表示0出现2次;对于0034,0*表示0出现1次;对于003,0*表示0出现0次;

System.out.println(string1);//192.168.010.034 127.000.000.001 003.003.003.003 105.070.011.055//3.切割,放到字符串数组

String[] strings= string1.split(" +");

TreeSet treeSet= new TreeSet();for(String string : strings) {

treeSet.add(string);//TressSet:默认的为升序

}

System.out.println("排序后的: ");for(String string : treeSet) {

System.out.println(string);

}

}public static voidcheckEmail(){

String string= "whjweo123_2@qq.com.c22";

String regex= "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]{2,3}){1,3}";boolean isEmail=string.matches(regex);

System.out.println("isEmail: "+isEmail);

}

output:

sayRight() run:

我我我我我我我要要要要要要要要要学学学学学学学学编编编编编编编程程程程

我要学编程

sortIp() run:

00192.00168.0010.0034 00127.000.000.001 003.003.003.003 00105.0070.0011.0055

192.168.010.034 127.000.000.001 003.003.003.003 105.070.011.055

排序后的:

003.003.003.003

105.070.011.055

127.000.000.001

192.168.010.034

checkEmail() run:

isEmail: false

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值