1 用途:
字符串匹配
字符串查找
字符串替换
例如:验证ip是否正确 网页中揪出email 网页中揪出链接
类:java.lang.String java.util.regex.Pattern java.util.regex.Matcher
2 String类型里面有两个方法:mathces和replaceAll。
Pattern中有compile方法
Matcher中有matchers方法
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
System.out.println("abc".matches("..."));//返回true
System.out.println("we3223def".replaceAll("\\d", "-"));//把数字全部替换成“-”
Pattern p = Pattern.compile("[a-z]{3}");//把正则表达式编译一下,以便提高速度
Matcher mathcer = p.matcher("dsd");//用已经编译的正则表达式去匹配字符串。产生的结果存到匹配器中
System.out.println(mathcer.matches());//把是否匹配用boolean类型打印出来。
}
}
3 认识 . * + ?
参考 :java1.5 帮助文档Pattern
public class Test2 {
public static void main(String[] args) {
//认识 . * + ?
//. 任何字符
//* 前面内容0个或多个
//+ 前面内容1个或多个
//? 前面内容0或1
System.out.println("a".matches("."));
System.out.println("aa".matches("aa"));
System.out.println("aaaa".matches("a*"));
System.out.println("aaaa".matches("a+"));
System.out.println("".matches("a*"));//true
System.out.println("".matches("a?"));//true
System.out.println("a".matches("a?"));//true
System.out.println("23425342".matches("\\d{3,100}"));
System.out.println("192.168.0.aa".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));
System.out.println("192".matches("[1-2][0-9][0-9]"));
}
}
4 范围表述:[]
一个中括号代表匹配一个字符。
^取反 -范围 |交集 &并集
[sdv]表述取其中的某一个即可。
[^sef]表述去除了其中的内容。其他都可以
[a-z]表述从a到z
[a-zA-Z] 表述从a到z或从A到Z
[a-z]|[A-Z] 也是表述从a到z或从A到Z
[a-z[A-z]] 同上
[A-z&&[RFG]] 表述从A到Z且在[]其中的
5 认识\s \w \d \
\d 代表一位数字
\D 代表非数字
\s 代表空白字符:如空格 制表符 回车 等
\S 代表非空白字符
\w 代表名称字符:字母 数字 下划线
\W 代表非名称字符
\ 代表转译字符。
特别注意:当要判断"\"时,在java中表述变为"\\"。用正则表达式去匹配就应该为"\\",但还要用java的中去表述出来,即为"\\\\".综上所述:"\\".matches("\\\\")为true。其实要表达的意思是“\”用正则表达式“\\”来匹配。
6 POSIX (用的不多)
\p{Lower} 小写字母字符:[a-z]
\p{Upper} 大写字母字符:[A-Z]
\p{ASCII} 所有 ASCII:[\x00-\x7F]
\p{Alpha} 字母字符:[\p{Lower}\p{Upper}]
\p{Digit} 十进制数字:[0-9]
\p{Alnum} 字母数字字符:[\p{Alpha}\p{Digit}]
\p{Punct} 标点符号:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
\p{Graph} 可见字符:[\p{Alnum}\p{Punct}]
\p{Print} 可打印字符:[\p{Graph}\x20]
\p{Blank} 空格或制表符:[ \t]
\p{Cntrl} 控制字符:[\x00-\x1F\x7F]
\p{XDigit} 十六进制数字:[0-9a-fA-F]
\p{Space} 空白字符:[ \t\n\x0B\f\r]
7 边界匹配:
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(如果有的话)
\z 输入的结尾
public class Test3 {
public static void main(String[] args) {
System.out.println("hello sir".matches("^h.*"));//true
System.out.println("hello sir".matches(".*ir$"));//true
// \b表示单纯边界
System.out.println("hello sir".matches("^h[a-z]{1,3}o\\b.*"));//true
System.out.println("hellosir".matches("^h[a-z]{1,3}o\\b.*"));//false
System.out.println(" \n".matches("^[\\s&&[^\\n]]*\\n$"));//验证是否是“空白行”,true
}
}
8 有管Patter和Matcher的方法介绍:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test4 {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("\\d{3,5}");
String s = "123-321-3214-32";
Matcher m = pattern.matcher(s);
System.out.println(m.matches());//false 记得是要全面匹配
m.reset();//把mathcer回复回去.让吃掉的内容恢复从原来的样子
//matcher的find的方法是从字符串中查找是否有符合要求的字符子串。然后把已经匹配的吃掉
System.out.println(m.find());//true
System.out.println(m.start()+"-"+m.end());//0-3
System.out.println(m.find());//true
System.out.println(m.start()+"-"+m.end());//4-7
System.out.println(m.find());//true
System.out.println(m.start()+"-"+m.end());//8-12
System.out.println(m.find());//false
//只有在能够找到子串的情况下才能使用start()和end()。否则报错
//System.out.println(m.start()+"-"+m.end());
//matcher的longingAt的方法是从字符串的开始查找是否有符合要在的字符字串。
System.out.println(m.lookingAt());//true
//字符串的替换
Pattern pa = Pattern.compile("java",Pattern.CASE_INSENSITIVE);//后面的意思是忽略大小写
String st = "java java ILoveJava YouHateJava";
Matcher mm = pa.matcher(st);
System.out.println(mm.replaceAll("JAVA"));
}
}
9 分组:在正则表达式中加入(),即可完成分组。0为整个字符串,1...为相应顺序的分组。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test5 {
public static void main(String[] args) {
Pattern pa = Pattern.compile("(\\d{3,5})([a-z]{2})");
Matcher m = pa.matcher("123dw-31243bf-3243");
System.out.println(m.matches());//false
m.reset();
while(m.find()){
System.out.println("-----");
System.out.println(m.group());//默认为0 即全组
System.out.println(m.group(1));
System.out.println(m.group(2));
}
}
}
分享到:
相关推荐
外加热强制循环蒸发器装配图(CAD).rar
数控车床纵向进给系统设计.zip
j
爬虫 bangumi名称和评论数
基于SpringBoot的垃圾分类回收系统,系统包含两种角色:管理员、用户主要功能如下。 【用户功能】 首页:浏览垃圾分类回收系统信息。 个人中心:管理个人信息,查看历史记录和订单状态。 运输管理:查看运输信息,垃圾回收的时间和地点。 公告管理:阅读系统发布的相关通知和公告。 垃圾回收管理:查看垃圾回收的信息,回收类型和进度。 垃圾出库申请管理:提交和查看垃圾出库申请的状态。 【管理员功能】 首页:查看垃圾分类回收系统。 个人中心:管理个人信息。 管理员管理:审核和管理注册管理员用户的信息。 用户管理:审核和管理注册用户的信息。 运输管理:监管和管理系统中的运输信息。 公告管理:发布、编辑和删除系统的通知和公告。 垃圾回收管理:监管和管理垃圾回收的信息。 垃圾出库申请管理:审批和管理用户提交的垃圾出库申请。 基础数据管理:管理系统的基础数据,运输类型、公告类型和垃圾回收类型。 二、项目技术 编程语言:Java 数据库:MySQL 项目管理工具:Maven 前端技术:Vue 后端技术:SpringBoot 三、运行环境 操作系统:Windows、macOS都可以 JDK版本:JDK1.8以上都可以 开发工具:IDEA、Ecplise、Myecplise都可以 数据库: MySQL5.7以上都可以 Maven:任意版本都可以
内容概要:本文档是台湾大学计算机科学与信息工程系2021年秋季学期《算法设计与分析》课程的第一次作业(Homework#1)。作业包含四道编程题和三道手写题,旨在考察学生对算法设计和分析的理解与应用能力。编程题涉及汉诺塔、数组计算、矩形点对、糖果分配等问题;手写题涵盖渐近符号证明、递归方程求解、幽灵腿游戏优化、不公平的卢卡斯问题等。文档详细描述了每个问题的具体要求、输入输出格式、测试用例以及评分标准。此外,还提供了编程技巧和注意事项,如避免延迟提交、正确引用资料、处理大输入文件等。 适合人群:具备一定编程基础的本科生或研究生,特别是修读过或正在修读算法设计与分析相关课程的学生。 使用场景及目标:①帮助学生巩固课堂所学的算法理论知识;②通过实际编程练习提高解决复杂问题的能力;③为后续更深入的学习和研究打下坚实的基础。 其他说明:此作业强调团队合作和个人独立思考相结合的重要性,鼓励学生在讨论后用自己的语言表达解决方案,并注明参考资料。对于编程题,特别提醒学生注意输入文件可能较大,建议采取适当的优化措施以确保程序运行效率。
基于SpringBoot的铁路订票管理系统,系统包含两种角色:管理员、用户主要功能如下。 【用户功能】 首页:浏览铁路订票管理系统的主要信息。 火车信息:查看火车的相关信息,包括车次、出发地、目的地和票价等。 公告资讯:阅读系统发布的相关通知和资讯。 后台管理:进行系统首页、个人中心、车票预订管理、车票退票管理等操作。 个人中心:管理个人信息,查看订单历史记录等。 【管理员功能】 首页:查看铁路订票管理系统。 个人中心:修改密码、管理个人信息。 用户管理:审核和管理注册用户的信息。 火车类型管理:管理系统中的火车类型信息。 火车信息管理:监管和管理系统中的火车信息,添加、编辑、删除等。 车票预订管理:处理用户的车票预订请求。 车票退票管理:处理用户的车票退票请求。 系统管理:管理系统的基本设置,公告资讯、关于我们、系统简介和轮播图管理。 二、项目技术 编程语言:Java 数据库:MySQL 项目管理工具:Maven 前端技术:Vue 后端技术:SpringBoot 三、运行环境 操作系统:Windows、macOS都可以 JDK版本:JDK1.8以上都可以 开发工具:IDEA、Ecplise、Myecplise都可以 数据库: MySQL5.7以上都可以 Maven:任意版本都可以
塑料架注射模具设计.rar
基于json文件数据驱动的的接口测试框架
铁丝缠绕包装机设计-缠绕盘设计.rar
linux
圆柱体相贯线焊接专机工作台设计.rar
硬币分拣机设计.rar
内容概要:本文探讨了开发行业级机器学习和数据挖掘软件的经验与教训,指出当前研究界与工业界之间的脱节问题。作者分享了开发LIBSVM和LIBLINEAR的经验,强调了用户需求的重要性。大多数用户并非机器学习专家,期望简单易用的工具来获得良好结果。文章还详细介绍了支持向量机(SVM)的实际应用案例,包括数据预处理(如特征缩放)、参数选择等步骤,并提出了为初学者设计的简易流程。此外,作者讨论了在设计机器学习软件时应考虑的功能选择、选项数量、性能优化与数值稳定性等问题,强调了软件开发与实验代码的区别以及鼓励研究人员参与高质量软件开发的重要性。 适合人群:对机器学习软件开发感兴趣的科研人员、工程师及从业者,尤其是那些希望了解如何将学术研究成果转化为实际可用工具的人士。 使用场景及目标:①帮助非机器学习专家的用户更好地理解和使用机器学习方法;②指导开发者在设计机器学习软件时考虑用户需求、功能选择、性能优化等方面的问题;③促进学术界与工业界之间的合作,推动高质量机器学习软件的发展。 其他说明:本文不仅提供了具体的开发经验和技巧,还呼吁建立激励机制,鼓励更多研究人员投入到机器学习软件的开发中,以解决当前存在的研究与应用脱节的问题。
一天入门pandas代码
该资源为joblib-0.12.0-py2.py3-none-any.whl,欢迎下载使用哦!
内容概要:本文档《xtuner_requirements.txt》列出了用于支持特定项目(可能是机器学习或深度学习项目)运行所需的所有Python包及其版本。其中不仅包括常见的数据处理和科学计算库如numpy、pandas,还包括了与深度学习密切相关的库如torch、transformers等。值得注意的是,文档中还特别指定了NVIDIA CUDA相关组件的具体版本,确保了GPU加速环境的一致性和兼容性。此外,文档中也包含了从GitHub直接安装的xtuner库,明确了具体的提交哈希值,保证了代码来源的精确性。 适合人群:对机器学习、深度学习领域有一定了解并需要搭建相应开发环境的研发人员,尤其是那些希望复现特定实验结果或基于已有模型进行二次开发的研究者和技术爱好者。 使用场景及目标:①帮助开发者快速搭建完整的开发环境,确保所有依赖项正确无误;②为研究人员提供一个稳定的实验平台,以便于重复实验和验证结果;③作为项目协作的基础,确保团队成员之间的环境一致性,减少因环境差异带来的问题。 阅读建议:由于该文档主要为技术性依赖列表,在阅读时应重点关注所需安装的库及其版本号,特别是CUDA相关组件和自定义库(如xtuner)的安装方式。对于非技术人员而言,可能需要额外查阅相关资料来理解各库的作用。同时,在实际操作过程中,建议按照文档中的顺序逐一安装依赖,避免版本冲突等问题的发生。
j
液氮带控制点工艺流程图.rar
该资源为joblib-0.9.4-py2.py3-none-any.whl,欢迎下载使用哦!