Java---正则表达式
目录
一、正则表达式的介绍
二、正则表达式的基本语法
(1)字符类
(2)预定义符
(3)数量词
三、正则表达式的具体实例
(1)判断电话号码是否符合规则
(2)简单爬虫
(3)爬取电话和邮箱
(4)条件爬取
(5)贪婪和非贪婪爬取
(6)正则表达式在字符串表达式中的使用
一、正则表达式的介绍
正则表达式是对字符串操作的逻辑表达式,说的是不是有点抽象呢,那说说它的作用其实更加好懂。正则表达式可以校验字符串是否符合规则(规则由你定),这样的话你就可以在一段文本内容中查找你想要的内容了
二、正则表达式的基本语法
上面说过了正则表达式其实就是对于一个字符串根据你制定的规则做出的一个逻辑判断,所以我们会使用其中的一个API,也就是matches函数,参数是你制定的规则,返回值是boolean型。即字符串.matches(规则)
(1)字符类
[abc] 只能是abc其中一个字符 [^abc] abc这三个字符不可以被选择,其他字符可以 [a-zA-Z] 只能在a-z和A-Z这两个区间中选择,两个区间以外的字符不可被选 [a-z[A-Z]] 和第三种的意思是一样的,只能在两个区间中被选择 [a-z&&[def]] a-z和def的交集,也就是说只能取def这三个字符其中之一 [a-z&&[^def]] a-z中并且出了def的字符 [a-z&&[^m-p]] a-z中除了m-p的字符,也就是[a-lq-z]
(2)预定义符
. 任意字符 \d 一个数字[0-9] \D 非数字[^0-9] \s 一个空白字符[\t\n\f\r] \S 非空白字符 \w [a-zA-Z_0-9]英文数字下划线 \W 除了英文数字下划线
(3)数量词
x? x出现了一次或者是0次 x+ x出现了一次或者多次 x* x出现了0次或者是多次 x{n} x出现了正好是n次 x{n,} x出现了至少n次 x{n,m} x出现了至少是n次但是不超过m次
这里我提醒大家一下,千万要看清楚你写的规则是匹配一个字符还是多个字符
三、正则表达式的具体实例
(1)判断电话号码是否符合规则
需求:十一个数字,第一个数字只能是1,最后一个数字不能是0。
public class Test {public static void main(String[] args){Scanner sca=new Scanner(System.in);System.out.print("请输入你的电话号码:");String s=sca.next();//电话号码String rule="1[0-9]{9}[1-9]";//定义的规则System.out.print(s.matches(rule));} }
(2)简单爬虫
需求:一段文本中查找Java或者是Java出现的版本号
public class Test {public static void main(String[] args){String s="市东南部ujbis1Java12史努比偶数" +"圣诞节你为奶茶店搜防静电Java1山东噢in计算Jav为oio看上你" +"Java19是可能空岛生存·Java30搜坚定Java=数据库你打算";String regex="Java\\d{0,2}";Pattern p= Pattern.compile(regex);Matcher m=p.matcher(s);while(m.find()){System.out.println(m.group());}} }
(3)爬取电话和邮箱
需求:在一段文本中,爬取电话号码和邮箱
public class Test {public static void main(String[] args){String s="81是的配送费打开你发182654678541所点击时间内" +"ujhgtr@163.com搜的金丝楠18871110981是啊都是你的手机卡圣诞节迫使@163.com" +"搜坚定yuhsyw@163.coomi1搜电脑172890987665搜绝对是gygwas163.com庶竭驽钝" +"18235454567是第几行你UIUIu@163.com我似乎单词表18765432140";String re1="1\\d{9}[1-9]";//电话号码String re2="[a-zA-Z]{6}@163.com";String re=re1+"|"+re2;//两个规则满足其中之一即可,用竖线Pattern p=Pattern.compile(re);Matcher m=p.matcher(s);while(m.find()){System.out.println(m.group());}} }
(4)条件爬取
((?i)java) 忽略Java的大小写(java)(?=7|8) 这里的问号其实可以理解成占位符,总体表达的意思是查找java7或者java8并且输出时不显示java后面的的版本号(java)(?:7|8) 与上面相反,它是显示后面的版本号的(java)(?!7|8) 查找除了java7和java8
需求:在一段文本中查找Java和Java17,Java8,Java7(忽略大小写)
public class Test {public static void main(String[] args){String s="是的苏北jaVa18是可能都跑了实力派我JaVA89osadisd我的是极品搜" +"JAVA17isadhoJAVA11安排激动java10时都是你我说的菜农Java12是哦滑动SOL" +"是冬季是破烦巴萨jAvA8开始就等你";String re1="((?i)java)(?=8|7|17)";//查找只输出前面的java部分String re2="((?i)java)(?:7|8|17)";//查找同时也输出后面的部分,也可以写成((?i)java)(7|18|17)String re3="((?i)java)(?!7|8|17)";//查找除了版本号是8,7,,17System.out.println("规则1");Pattern p1=Pattern.compile(re1);Matcher m1=p1.matcher(s);while(m1.find()){System.out.println(m1.group());}System.out.println("规则2");Pattern p2=Pattern.compile(re2);Matcher m2=p2.matcher(s);while(m2.find()){System.out.println(m2.group());}System.out.println("规则3");Pattern p3=Pattern.compile(re3);Matcher m3=p3.matcher(s);while(m3.find()){System.out.println(m3.group());}} }
(5)贪婪和非贪婪爬取
贪婪爬取:在爬取数据的时候尽可能的多获取数据 非贪婪爬取:在爬取数据的时候尽可能少获取数 据 只写+,*表示贪婪爬取(Java中默认是贪婪爬取) +?,+*表示非贪婪爬取
public class Test {public static void main(String[] args){String s="搜绝对是你uiuisudjh怕端口abbbbb啥动静那等";String rex1="ab+";String rex2="ab?+";Pattern p1=Pattern.compile(rex1);Pattern p2=Pattern.compile(rex2);Matcher m1=p1.matcher(s);Matcher m2=p2.matcher(s);System.out.println("贪婪爬取");while(m1.find()){System.out.println(m1.group());}System.out.println("非贪婪爬取");while(m2.find()){System.out.println(m2.group());}} }
(6)正则表达式在字符串表达式中的使用
这里主要介绍两个方法:replaceAll和split replaceAll(规则,代替的字符串) 将字符串中符合规则的字符串替换成代替的字符串,返回值是修改后的 字符串,原来的字符串时不会发生变化的 split(规则) 根据规则切割,返回值是字符串数组
public class Test {public static void main(String[] args){String s="李三sodjsodjso张三丰0osodndn王天霸";String ss=s.replaceAll("[a-zA-Z0-9]+","vs");System.out.println(ss);String[] sc=s.split("[0-9a-zA-Z]+");System.out.println("字符串数组:");for(int i=0;i<sc.length;i++){System.out.println(sc[i]);}} }
Java---正则表达式相关推荐
- java正则表达式课程_通过此免费课程学习正则表达式
java正则表达式课程 by Beau Carnes 通过博卡恩斯 通过此免费课程学习正则表达式 (Learn Regular Expressions with this free course) & ...
- java正则表达式 1,Java正则表达式学习(1)
Java正则表达式学习(一) 1.什么是正则表达式: 正则表达式(regular expressions) 是一种描述字符串集的方法,它是以字符串集中各种字符串的公有特征为依据的. 正则表达式可以用于 ...
- 孪生素数 java代码_科学网—孪生素数猜想——利用 Java + 正则表达式 输出孪生素数对 - 马廷灿的博文...
查了一下资料,发现正则表达式竟然可以用来检查素数(http://coolshell.cn/articles/2704.html)!(由于工作需要,几年前开始接触.利用正则表达式,给工作带了很大方便,也 ...
- java正则表达式的用法_Java 正则表达式的使用
Java 正则表达式的使用 1:正则表达式语法大全 字符 说明 \ 将下一字符标记为特殊字符.文本.反向引用或八进制转义符.例如,"n"匹配字符"n".&quo ...
- Java正则表达式--Matcher.group函数的用法
https://www.cnblogs.com/jiafuwei/p/6080984.html Java正则表达式--Matcher.group函数的用法 原来,group是针对()来说的,group ...
- java 正则表达式入门(一)
Java正则表达式 定义:具有特定规则的一种表达式语言. 作用:专门用于操作字符串,操作意味着(校验,截取).且可以简化我们对字符串的操作方式 比如,验证手机号码 如果没有正则表达式我们的过程就应该是 ...
- bigint对应java什么类型_「JAVA」从格式化输出到扫描输入,深究Java正则表达式匹配之道
字符串是不可变的 字符串是不可变的,也就是说当字符串的内容发生改变的时候,会创建一个新的String对象:但是如果内容没有发生改变的时候,String类的方法会返回原字符串对象的引用. 而正则表达式往 ...
- Java 正则表达式使用详解
今天研究开源项目,哆啦A梦,研究里面显示log 的原理. 后来发现,用到了正则表达式.觉得很有用,就捡起来,重新研究一下. 学习思路指导: 每一门学问,最好的深入学习方法,是去其官网,研究其说明文档. ...
- java正则表达式 过滤特殊字符的正则表达式
在网上找了好久也没找到个合适的正则表达式以过滤特殊字符:自己学习了下,写了两个,实现要求. Java代码 // 过滤特殊字符 public static String StringFilter(Str ...
- JAVA正则表达式:Pattern类与Matcher类详解(转)
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...
最新文章
- Spring MVC 拦截器
- 内容管理系统 Nuxeo认证绕过和RCE漏洞(CVE-2018-16341) 分析
- 物联网离风口还差最关键一环?
- 就业信息网进行服务器维护,服务器安全武汉大学黄石理工学院就业信息网.pptx...
- AliOS Things声源定位应用演示
- G - Hard problem CodeForces - 706C DP
- KDD Cup2020 正式开赛,天池诚邀各路豪杰来挑战!!
- DOM操作 append prependTo after before
- 数据结构专题(二):2.2单链表与顺序表,求元素个数,取值与查找
- js基于后台数据实现table行列合并
- ASCII码、Unicode和UTF-8之间的转换
- 读钱钟书的《写在人生边上 人生边上的边上 石语》(一)
- 追“根”溯源:植物根际的微生物生态
- 不要把别人对你的好,当作是理所当然
- 802.11有线等效加密WEP
- C++ OpenCV 抠商标图片文字背景透明
- JAVA中计算五子棋平局的算法_输入五子棋棋盘判断输赢或平局—程序设计(C语言)...
- 【CZY选讲·Triangle】
- UESTC ACM训练题二
- convert转化函数的用法