Java 正则表达式

文章介绍了Java中的正则表达式功能,如Stringmatches(),Stringsplit(),replaceAll(),展示了如何使用预定义字符类进行匹配和替换操作。还提及了正则表达式的匹配策略,如贪婪匹配和组的使用。最后,文章提到一份针对Java开发者的学习资料,包含了不同层次的内容和资源。
摘要由CSDN通过智能技术生成

具有操作功能:

1.匹配:用String matches()方法匹配整个字符串,只要有1处不符合,就返回false

2.切割:String split()

**

3.替换:String replaceAll()

4.获取

**预定义字符类

. 任何字符(与行结束符可能匹配也可能不匹配)

\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 次

为了可以让规则的结果被重用,可以将规则封装成组,用小括号完成,组的出现都有编号,**

从1开始,想要使用已有的组,可以通过\n(n就是组的编号)的形式来获取

public class RegexDemo01 {

public static void main(String[] args) {

//demo();

//checkEmail();

//checkQQ();

//checkTel();

//splitDemo();

replaceAllDemo();

}

//替换字符串

public static void replaceAllDemo(){

//要求,将字符串中的数字替换成#

/*String str = “nby3hjkjdhsajkdgahkfajkbmcuey6783264329grbhwkegy369123eqbdu”;

String reg = “\d{5,}”; //连续超过5个的,数字(\d)

String newStr = “#”;*/

//要求:将叠词替换成$号 将重叠的字母替换成单个字母aaaa->a

String str = “dasfaaaafdsgsgggggggggggggregtr”;

String reg = “(.)\1+”; //组,重复出现1次或多次

String newStr = "$1\ " ; / / 替换成 "; //替换成 ";//替换成,则需要转义字符来弄一下 $可以获取前面的正则表达式中组的信息,1表示第1组,而第1组刚好是叠词的第一个字母,

str = str.replaceAll(reg, newStr); //使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串

System.out.println(str);

}

//切割字符串

public static void splitDemo(){

//String str = “zhangsan lisi wangwu”;

//String reg = " +"; //空格出现一次或多次 按照多个空格进行切割

//String str = “zhangsan.lisi.wangwu”;

//String reg = “\.”; //这里需要用转义字符\来弄一下 因为单独的. 表示任意字符

//String str = “c:\abc\a.txt”; // 将按照\切割的字符串

//String reg = “\\”; //这里设置的规则是\

String str = “dasfaaaafdsgsgggggggggggggregtr”; // 将按照叠词(eg:aa,gg)切割的字符串

//第一个位置是任意字符,第二位拿的是第一位的结果 按照叠词完成切割,为了可以让规则的结果被重用,

//可以将规则封装成组,用小括号完成

String reg = “(.)\1+”; //组,前面一个组,重复一次或多次 即代表重叠, “(.)\1”:重复一组

String[] arr = str.split(reg);

System.out.println(arr.length); //数组长度

for(String a : arr){

System.out.println(a);

}

}

//校验手机号 手机号段只有13XXX 15XXX 18XXX

public static void checkTel(){

String tel = “15482027845”;

String regex = “1[358]\d{9}”; //第一位是1,第二位是3,5,8,后面的全是数字,共11位

Boolean flag = tel.matches(regex); // 利用正则表达式,看是否符合格式

if (flag) {

System.out.println("Tel: " + tel);

} else {

System.out.println(“格式错误”);

}

}

//校验QQ号,5-15位,全是数字,不能以0开始

public static void checkQQ(){

String qq = “123456789012345”;

String regex = “[1-9]\d{4,14}”; // 第1位是1-9的数字,第二位是0-9的数字,且第二位可以有4-14个

Boolean flag = qq.matches(regex); // 利用正则表达式,看是否符合格式

if (flag) {

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

} else {

System.out.println(“格式错误”);

}

}

//[a-z&&[^bc]]:a-z的字母,除了b和c

public static void demo() {

String str = “13432532”;

//String reg = “[bcd]”; //这一位置,只能是bcd中的其中一个 这个字符串只能有1个字符

//3个位置,第一个位置是非a的任何字符,第二个是bcd中的其中一个,第三个位置是A-z的其中一个小写字母,大写字母

//String reg = “[^a][bcd][a-zA-Z]”;

String reg = “\d{4,}”; // \代表后面有特殊符号,\d表示0-9的数字

Boolean b = str.matches(reg);

System.out.println(b);

}

}

下面是获取的代码:

public class RegexDemo02 {

public static void main(String[] args) {

//getDemo();

getDemo2();

}

public static void getDemo(){

//获取连续3个字母组成的单词

String str = “ming tian jiu yao fang jia la, da jia .”;

String reg = “\b[a-z]{3}\b”;

//将规则封装成对象

Pattern p = Pattern.compile(reg); //无构造函数,通过静态方法返回已封装好的Pattern对象

//让正则对象和要作用的字符串相关联 获取匹配器引擎

Matcher m = p.matcher(str); //Matcher:通过解释 Pattern 对 character sequence 执行匹配操作的引擎。

//其实String类中的matcher()方法用的就是Pattern和Matcher来完成的,只不过用String方法封装过,用起来简单一些.

while(m.find()){ //通过引擎对符合规则的字串进行操作 find():尝试查找与该模式匹配的输入序列的下一个子序列

System.out.println(m.group()); //group()用于获取匹配后 的结果 ,返回由以前匹配操作所匹配的输入子序列。

//Matcher :start()返回以前匹配的初始索引

//Matcher :end()返回最后匹配字符之后的偏移量

System.out.println(m.start()+“…”+m.end()); //包含头,不包含尾

}

}

}

下面是对于正则表达式的练习:

/**

  • 2016年7月31日19:05:16

  • 需求:

  • 将下列字符串转成:我要学编程

  • 将ip地址进行地址段顺序的排序

  • 对邮件地址进行校验

  • @author XFHY

  • 到底用四种功能中的哪一个?或者哪几个呢?

  • 思路方式:

  • 1,如果只想知道该字符是否有错,使用匹配

  • 2,想要将已有的字符串变成另一个字符串,替换

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
04)]

[外链图片转存中…(img-BUfjuiPC-1714803097004)]

[外链图片转存中…(img-ERO8ySqH-1714803097005)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值