1、什么是正则表达式?作用是什么?
正则表达式就是符合一定规则的表达式。
作用:用于专门操作字符串的规则(操作字符串不是有String类吗因为String类中的方法操作字符串过于简单,但要组合操作字符串又过于复杂,所以通过正则表达式更容易些)
特点:用一些特定的符号表示一些代码的操作,这样就能简化书写,所以学习正则表达式就是在学习一些特殊符号的使用,API java.util.regex包中Pattern类有详细的定义。
2、正则表达式的小应用——判断QQ号
需求:判断QQ号,该QQ号5~15位 0不能开头 只能是数字
思路:在String中有一个方法 boolean matches(String regex) 参数是一个正则表达式,所以我们定义一个正则表达式即可。
public static void qqJiancha(String str) { String regex = "[1-9] [0-9] {4,14}";//该语句就是正则表达式规则意思是:第一位是1到9的数字 第二位是0到9的数字后面是第二位出现的次数,最少4次最多14次。如果任意条件不满足则返回false。 if(str.matchaes(regex)) System.out.println("QQ号正确"); else System.out.println("QQ号错误"); }
3、正则表达式的使用
1、匹配
通过String类中的方法 boolean matches(String regex) 用规则匹配整个字符串,只要有一处不符合规则就匹配结束并返回false。
在正则中[abc] 可用于判断字符串中某一个位置上出现的字符,要么是a要么是b要么是c,只能有一个字符
[^abc] 除了abc以外的任意字符
[a-zA-Z] 小写a到z或者大写A到Z
\d 代表0到9数字等同于[0-9],但在写正则是应写成"\\d"因为\本身是转义字符,所以在正则中\是成对
. 点 代表任意字符
Greedy 数量词X代表正则
X? X,一次或一次也没有 // eg :regex = "[a-z] \\d ?";第一位是a~z第二位是数字但可能有1次也可能没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
2、切割
2.1通过String类中的方法String[ ] split(String regex)
2.2按照叠词(后一个和前一个一样的词)进行切割
正则写法:regex = "(.)\\1";//该语句用到了组,意思是第一位是任意字符而第二位和第一位一样。为了可以让规则的结果被重用可以将规则封装成组用()完成,组的出现都有编号,从1开始想要使用已有组可以通过\\n的形式来获取,其中n是组的编号。如果会出现多次可以在后面写个+号,即regex = "(.)\\1+"。((())())问几组看有几个左括号。
3、替换
3.1通过String类中的方法String replaceAll(String regex, String replacement)
eg:将字符串中的数字替换成#号 sfsf43346365ghfh
replaceAll( "\\d{5,}","#")//数字出现5个或5个以上的就替换成#
eg:将叠词替换成单个字母 sadaddddddfdseee
replaceAll( "(.)\\1+","$1")//将叠词替换成一个,$1是获取组第一组。
4、获取
4.1就是将字符串中符合规则的规则的子串取出来
步骤:
1、将正则表达式封装成对象
2、让正则对象和要操作的字符串相关联
3、关联后获取一个正则匹配引擎
4、通过引擎对符合规则的字符串进行操作比如取出
import java.util.regex.*; class GetString { public static void main(String[] args) { String s ="hei ma wo lai la ,deng zhe wo o ga yo ji"; String regex = "\\b[a-z]{2}\\b"; regexString(s,regex); } public static void regexString(String s,String regex) { //将正则表达式封装成对象 Pattern p = Pattern.compile(regex); //将正则表达式与字符串相关联,并获取引擎Matcher Matcher m = p.matcher(s); //通过引擎Matcher中的find()方法对字符串进行匹配 //通过group()方法获取匹配后的结果 while(m.find()) { System.out.println("m.group()"+m.group()); } } }
4、怎么选择正则表达式的功能?
思考方式:
1、如果只想知道该字符串是否对错,使用匹配。
2、想要将已有的字符串转换成另一个字符串,使用替换。
3、想要按照自定义的方式将字符变成多个字符串,使用切割
4、想要拿到符合需求的字符串子串,使用获取
5、正则表达式小练习
class Test1 { public static void main(String[] args) { //将字符串转换成“我要学编程” //将已有字符串转换成另一个字符串 使用替换功能 String str ="我我...我我....我我.........我要要...学学学.......学...编编编....程程"; String regex = "\\.+"; //将字符串中的.替换成“” String str1 = str.replaceAll(regex,""); //通过引用组,将叠词替换成一个词 String str2 = str1.replaceAll("(.)\\1+","$1"); System.out.println("结果是:"+str2); } } --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- import java.util.*; class Test2 { public static void main(String[] args) { ipSort(); } public static void ipSort() { String ip = "192.168.1.254 102.49.23.13 10.10.10.10 2.2.2.2 8.109.30.90"; //通过替换功能将 为IP地址补0 String ip1 =ip.replaceAll("(\\d+)","00$1"); System.out.println("补完2个0后的结果:"+ip1); //补完0后有的结果会是5位,所以将结果都保留3位 String ip2 = ip1.replaceAll("0*(\\d{3})","$1"); System.out.println("保留3位后的结果:"+ip2); //将ip2进行切割 以" +"切 String[] ip3 =ip2.split(" +"); //对字符数字进行排序并打印 Arrays.sort(ip3); for (int i=0;i { //正则意思 0出现零次或多次,第二位是数字出现一次或多次 引用组 System.out.println(ip3[i].replaceAll("0*(\\d+)","$1")); } } } --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //对邮件地址进行校验 public static void checkMail() { String mail = "aewgw4252@sina.com"; String regex ="[a-zA-Z0-9_]{4,11}@[a-zA-Z0-9]{2,7}(\\.[a-zA-Z]+){1,2}"; System.out.println(mail.matches(regex)); } --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 网页爬虫(从互联网或文件中获取自己自定义的内容) import java.io.*; import java.util.regex.*; import java.net.*; class paChong { public static void main(String[] args) throws Exception { getMail(); //webMail(); } //从网页中获取邮箱 public static void webMail()throws Exception { //String mailRegex ="[a-zA-Z0-9_]{3,15}@[a-zA-Z0-9]{1,5}(\\.[a-zA-Z]+){1,2}"; String mailRegex ="\\w+@\\w+(\\.\\w+)+"; URL url = new URL("http://blog.sina.com.cn/s/blog_515617e60101e151.html"); Pattern p = Pattern.compile(mailRegex); //获取连接器 URLConnection uc = url.openConnection(); //获取流 BufferedReader bfr = new BufferedReader(new InputStreamReader(uc.getInputStream())); String line = null; while((line=bfr.readLine()) != null) { Matcher M =p.matcher(line); if(M.find()) { System.out.println(M.group()); } } } //从文本中获取邮箱 public static void getMail()throws Exception { String mailRegex ="\\w+@\\w+(\\.\\w+)+"; //String mailRegex ="[a-zA-Z0-9_]{4,11}@[a-zA-Z0-9]{2,7}(\\.[a-zA-Z]+){1,2}"; File f = new File("G:\\桌面临时文件\\mail.txt"); Pattern p = Pattern.compile(mailRegex); if(f.exists()) { BufferedReader bfr = new BufferedReader(new FileReader(f)); String line = null; while((line=bfr.readLine()) != null) { Matcher M =p.matcher(line); if(M.find()) { System.out.println(M.group()); } } } } }
相关推荐
通过学习黑马传智的Python正则表达式课程,你将能够熟练运用正则表达式解决实际问题,无论是数据提取、文本分析还是验证输入,都能得心应手。正则表达式是每个Python程序员必备的技能之一,熟练掌握后,你的代码将会...
Java正则表达式介绍和练习Java正则表达式介绍和练习Java正则表达式介绍和练习
在学习正则表达式之前,首先了解几个重要的概念和常用的符号是非常有帮助的。 - **元字符**:如`.`、`^`、`$`、`*`、`+`、`?`等,这些特殊字符具有特殊的含义。 - **字符类**:如`[abc]`表示a、b或c中的任意一个...
含书签,可检索 01_Python基础 02_linux基础 03_python高级 04_linux系统编程 ...07_正则表达式课件 08_数据结构和算法 09_MySQL 10_mongo 11_redis 12_前端 13_django 14_爬虫 15_tornado 16_shell 17_微信公众号
黑马程序员__移动商城项目实战 包括黑马程序员乐淘商城实战和慕课React+Antd
公式指标,黑马起爆,有助于判断什么时候可以入手
2. **正则表达式**:理解正则表达式的基本语法,用于高效地处理和匹配字符串。 3. **异常处理**:深入理解Python的异常体系,学会编写健壮的代码来处理各种运行时错误。 4. **标准库使用**:如os模块用于操作系统...
标题中的“heima_ugo_xiaochengxu_黑马训练营_微信小程序_小程序支付_VantWeapp商城”揭示了这是一个关于微信小程序开发的项目,由黑马训练营提供教学支持,特别关注了商城功能、微信登录和微信支付的集成,并且使用...
黑马程序员_毕向东_Java基础视频教程第18天-14-IO流(拷贝文本文件图例).zip
重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip重现黑马评论项目_ hmdp.zip
存放黑马项目源代码_heima
黑马程序员_张孝祥_Java多线程与并发库,老师讲的非常仔细,老师很有耐心.欢迎大家下载学习.
需要先学习完正则表达式和ES6 学会基础再多去写写项目加深对知识层面的加强
【青橙电商前台开发02】课程主要涵盖了电商网站前端开发的相关知识,是黑马教育机构...同时,黑马青橙电商的课程通常以实战为导向,让你在实践中学习和成长,所以“好好看吧”,这对你在电商领域的职业发展将大有裨益。
这份笔记由多个部分组成,分别详细讲解了Java的基础语法、集合、多线程、IO以及反射和正则表达式等关键概念。 1. **基础语法**: - **变量与数据类型**:包括基本数据类型(如int、char、boolean)以及引用数据...
《黑马程序员_hibernate框架开发2016版讲义...通过对黑马程序员提供的这门课程的学习,开发者不仅能掌握Hibernate的核心概念和技术,还能提升在实际项目中的数据库操作效率,为构建高效、稳定的Java应用打下坚实基础。
下面将详细介绍JavaWeb的基本概念、核心技术和黑马程序员源码在学习过程中的作用。 1. **JavaWeb基础** JavaWeb是基于Java技术构建Web应用的框架,它包括Servlet、JSP(JavaServer Pages)、JSTL(JavaServer ...
【标题】"传智播客_黑马_品优购_2018"指的是一个由传智播客和黑马程序员联合推出的2018年品优购相关的IT培训课程资源。这个课程可能涵盖了电子商务、互联网产品开发、运营等多个方面,旨在帮助学员掌握最新的技术和...
28_黑马程序员_struts2.1视频教程_ognl表达式.rar讲解的是OGNL(Object-Graph Navigation Language),它是Struts2中的默认表达式语言,用于在Action对象和视图之间传递数据。学习OGNL可以帮助开发者更好地理解数据...
暗示这门课程可能包含一系列视频教程,首个文件"01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.avi"很可能是课程的开篇,详细阐述了课程的价值、目标以及教学计划,帮助学员了解学习路径和预期收获。...