天天热资讯!java中的正则表达式 java.util.regexJava中正则表达式的构造
介绍
前段时间使用Java的正则表达式做一些字符串匹配的任务,现将学到的正则表达式的知识整理成文。
Java中Spring.class涉及到正则表达式。如Spring.split(), matches(),replaceAll()等方法。
(资料图片)
Java中更一般使用正则表达式的方式是利用Pattern.class和Matcher.class,所在package为java.util.regex
Java中正则表达式相关API使用不难掌握,不过重点在于编写合适的正则表达式,尤其是利用字符类和量词的使用。
正则表达式
Java中正则表达式与之前使用的Python是有区别的,区别在于Java对于反斜线(\)处理的不同。 在Python中"\d"表示 匹配一位数字(0-9),而Java中匹配一位数字(0-9),需要的正则表达式为"\\d"。 不过换行符和制表符只需要单反斜线“\n\t”。
字符
给出构造正则表达式的常用字符
字符描述
B指定字符B
\xhh十六进制值为oxhh的字符
\uhhhh十六进制值为oxhhhh的Unicode字符
\ttab
\n换行
\r回车
\e转义
字符类
字符类在编写正则表达式起到重要的作用,我们给出一些常用的构造正则表达式的字符类。
字符类描述
. (小数点)任意字符
[abc][ ] 中括号,包含a,b,c中任意字符
[^abc][ ]中括号加^, 表示否定,除a,b,c之外的
[a-z]从a到z的任意字符
[a-z&&[hi]]&&表示交集,即包含h或i
\s空白字符,包含空格,换行,回车,tab,换页
\S大写为小写的取反,非空白字符,等价于[^\s]
\d数字0-9
\D非数字,等价于[^0-9]
\w词字符,数字,大小写字母,等价于[0-9a-zA-Z]
\W非词,等价于[^\w]
逻辑操作符
组合一个或多个表达式,通过逻辑操作符实现。
逻辑操作符描述
XYY跟在X后面,并且XY同时满足
X|YX或者Y
(X)() 小括号表示捕获组(group),可以对group进行处理,尤其是获取其中的内容
边界匹配符
针对边界的匹配,给出边界匹配符。
边界匹配符描述
^一行的开始
$一行的结束
\b词的边界
量词
量词描述了一个模式匹配文本的方式,包含
贪婪型:量词默认是贪婪的,发现尽可能多的匹配勉强型:通过问号(?)指定,匹配最小的字符数,也称为懒惰型,最少匹配,非贪婪。占有型:通过加号(+)指定,当用于字符串时防止匹配失败时回溯。
贪婪型勉强型占有型描述
X?X??X?+匹配0个或1个X
X*X*?X*+匹配0个或多个X
X+X+?X++匹配1个或多个X
X{n}X{n}?X{n}+恰好匹配n个X
X{n,}X{n,}?X{n,}+至少匹配n个X
X{n,m}X{n,m}?X{n,m}+至少匹配n个X,最多匹配m个X
正则表达式使用
String
String.class提供了一些方法,如用于切分的split()方法,用于验证是否匹配的matches()方法,用于替换操作的replaceAll方法。简单示例如下:
/** * String中正则表达式的测试 * * @throws Exception 异常情况 */ @Test public void testStringRegex() throws Exception { // split // 结果:[some, examples, of, regex, test] String query = "some examples of regex test"; String[] parts = query.split(" "); System.out.println(Arrays.toString(parts)); // matches 整个字符串是否匹配 // 结果:false String regex = "regex"; boolean isMatched = query.matches(regex); System.out.println(isMatched); // replaceAll // 结果:someexamplesofregextest String replaceQuery = ""; String newQuery = query.replaceAll(" ", replaceQuery); System.out.println(newQuery); }
Pattern和Matcher
正则表达式更一般的用法是使用*java.util.regex.*下的Matcher和Pattern类。
通过Pattern类的静态方法static Pattern.compile()编译正则表达式,利用Pattern的*matcher()*方法生产Matcher对象。根据Matcher对象提供的API完成相应的操作。
我们以获取字符串中的电话号码和Html中的标题为例,实现正则表达式的匹配。示例如下:
package com.notepad.thinkingnote.regexes;import java.util.ArrayList;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * Description: 正则表达式 * * Create: 2018/8/25 21:37 * * @author Marvin Yang */public class RegexUtils { /** * 获取content中全部的手机号码 * * @param content 待匹配内容 * @return 电话号码集合 */ public ListgetPhoneNumber(String content) { ListphoneNumbers = new ArrayList<>(); Matcher matcher = PHONE_PATTERN.matcher(content); while (matcher.find()) { // group=2对应(1\\d{10}), 匹配的值即为手机号码 phoneNumbers.add(matcher.group(2)); } return phoneNumbers; } /** * 从Html中获取title * * @param content a html * @return the title of a html */ public String getHtmlTitle(String content) { Matcher matcher = TITLE_PATTERN.matcher(content); return matcher.find()? matcher.group(1):null; } /** 手机号码 */ private static final String PHONE_REGEX = "(^|\\D)(1\\d{10})($|\\D)"; private static final Pattern PHONE_PATTERN; /** html 标题 */ private static final String HTML_TITLE_REGEX = ""; private static final Pattern TITLE_PATTERN; static { PHONE_PATTERN = Pattern.compile(PHONE_REGEX); // 不区分大小写 TITLE_PATTERN = Pattern.compile(HTML_TITLE_REGEX, Pattern.CASE_INSENSITIVE); }}
构造单测样例如下:
package com.notepad.thinkingnote.regexes;import org.junit.Test;import java.util.Arrays;import java.util.List;import static org.junit.Assert.*;/** * Description: 正则表达式单测 * * Create: 2018/8/25 21:45 * * @author Marvin Yang */public class RegexUtilsTest { private RegexUtils regexUtils = new RegexUtils(); @Test public void getPhoneNumber() { // test 1: 有电话号码 String content = "紧急情况请拨打13845697569"; ListphoneNumbers = regexUtils.getPhoneNumber(content); System.out.println(String.format("[%s] has phone number : [%s]", content, phoneNumbers)); // test 2: 数字12位 content = "紧急情况请拨打138456975690"; phoneNumbers = regexUtils.getPhoneNumber(content); System.out.println(String.format("[%s] has phone number : [%s]", content, phoneNumbers)); // test 3: 开头不是1 content = "紧急情况请拨打23845697569"; phoneNumbers = regexUtils.getPhoneNumber(content); System.out.println(String.format("[%s] has phone number : [%s]", content, phoneNumbers)); // test 4: 数字在开头 content = "13845697569紧急情况请拨打"; phoneNumbers = regexUtils.getPhoneNumber(content); System.out.println(String.format("[%s] has phone number : [%s]", content, phoneNumbers)); } @Test public void getHtmlTitle() throws Exception { // test 1: 正常情况 String content = ""; String title = regexUtils.getHtmlTitle(content); System.out.println(String.format("get title [%s] from content: [%s]", title, content)); // test 1: 不区分大小写 content = ""; title = regexUtils.getHtmlTitle(content); System.out.println(String.format("get title [%s] from content: [%s]", title, content)); }}
总结
本文对Java的正则表达式的使用进行了简单的介绍,已经利用Pattern和Matcher进行匹配的样例。当然重要的还是正则表达式的编写,不一定非得很复杂, 重点是适合我们处理的问题。
参考文献
标签: 正则表达式
相关推荐:
精彩放送:
- []finally的作用是什么?java异常处理之finally
- []当前观点:三年存款利率2022最新,十大银行三年定期利率一览
- []全球资讯:航餐难吃,某大型航司每年浪费价值上亿元?飞机上提供花钱点餐服务,靠谱吗?
- []银行存单是什么意思
- []【世界时快讯】2021年全国城市经济总量排名,上海排在第一位
- []支付宝转账手续费多少
- []屈子祠简介_屈子
- []世界资讯:公积金余额1万能贷款多少
- []【环球热闻】2022年各大银行大额存单利率表一览,五大行利率一览
- []建行卡开户行查询方式
- []1分利是什么意思?
- []最新快讯!TD早报 | 迪士尼CEO承认门票涨价“过于激进”;疫后我国首家境外中国签证中心开业
- []即时看!货币政策与财政政策的区别,有以下四点区别
- []邮政银行上班时间 邮政银行营业时间
- []重点聚焦!字节跳动相关概念股票
- []世界微头条丨全世界经济排名,世界各国gdp排名一览
- []余额宝收益率 余额宝的收益率多少
- []今日看点:2022中国通胀率一览表,2%到3%左右
- []【世界快播报】不止浙商证券 东吴证券也拟参拍34.71亿股民生证券股份
- []天天观点:贵州轮胎:截至2023年3月10日收市后,公司的股东户数为45,877户
- []每日聚焦:景瑞控股:达成复牌条件 涉及49.1亿存款独立调查已完成
- []齐界辞去大连万达商管董事长职务 肖广瑞获选接任
- []全球观热点:景瑞控股2021年净利3.94亿 独立核数师指经营存在重大不确定性
- []当前速递!安徽省技能人才振兴计划实施方案 2014—2017年
- []即时焦点:怎么投资挣钱
- []网上贷款怎么还款,有以下六种方法
- []10转10股什么意思
- []每日看点!新三板申购规则详解
- []天天速递!话费预存款什么意思
- []焦点速递!浙商证券拟参拍泛海控股所持34.71亿股民生证券股份 起价58.65亿
- []焦点观察:td指标,是德马克指标
- []讯息:中了可转债怎么操作,有以下三点
- []【环球热闻】一般车险多少钱 车险一般多少钱一年
- []环球快播:建设银行2020年大额存款利率
- []环球微头条丨金融app有哪些,十大网贷软件一览
- []世界速看:恒达集团发盈警 估计2022年权益股东应占溢利将减少65%至80%
- []世界简讯:金太阳:3月10日公司高管杨伟减持公司股份合计3.41万股
- []每日聚焦:美联储利率掉期预计美联储将在年底前降息50个基点
- []长亮科技:3月10日公司高管王长春、魏锋、徐亚丽、郑康减持公司股份合计104.75万股
- []铜牛信息:3月10日公司高管李超成减持公司股份合计4.24万股
- []三元生物:3月10日公司高管崔振乾减持公司股份合计5.26万股
- []焦点播报:跌停的股票可以买进吗 当然可以
- []余额宝最聪明的存钱法
- []交响旗舰走出北京,国家大剧院管弦乐团与上海再相约
- []什么是余额宝理财
- []全球微动态丨持仓限额
- []金融危机如何应对
- []新消息丨华侨城拟调剂对陕西华侨城商业担保额度 由5亿增至10.236亿
- []全球球精选!青木股份:公司品牌数字营销业务涉及在抖音及快手等多个新媒体平台的投放业务
- []世界微速讯:中南建设为中南建筑2.2亿元融资延长一年继续提供担保
- []世界速看:继硅谷银行后 美国签名银行因系统性风险被关闭
- []世界最资讯丨圆通速递:3月10日林凯增持公司股份合计5000股
- []环球百事通!沃格光电:3月9日公司高管熊伟增持公司股份合计7000股
- []如何查询股票中签号码,有以下三点
- []环球快消息!人民币为什么一直在贬值,有以下两种原因
- []直播预告|2023 环球旅讯数智论坛(北京站)直播预约通道正式开启
- []实时:股票黄色线是什么线
- []指数型基金什么意思
- []天天微速讯:银行叫号机功能,分以下四点
- []微头条丨中交地产定增方案获股东大会审议通过 此前拟募资不超35亿元
- []全球消息!飞马国际:本公司的主要经营业务为环保新能源业务和供应链管理服务,未涉及氢能源领域相关业务
- []天天亮点!泛海控股聘任严珊明为副总裁 李隽为风控法务总监
- []*ST易尚:公司未参加此次交易会
- []世界今日讯!朗进科技:截止2023年3月10日的公司股东人数是8919人
- []当前短讯!越秀资本上调“20越控01”存续期票面利率至2.95%
- []匠心家居:公司与硅谷银行无任何业务往来。硅谷银行在美国的北加州,公司的美国行政与财务中心在南加州
- []全球球精选!新湖中宝拟为控股股东新湖集团提供4.06亿元担保
- []环球视点!因个人工作原因 朱大兴辞去三湘印象证券事务代表职务
- []乳铁蛋白奶粉排行榜前十位?谁才是真正的含量“王”者
- []实时:公司汽车可以抵押贷款吗,可以
- []【世界新视野】2020年房贷利率是多少
- []全球速看:养老概念十大龙头股,核心概念龙头股一览
- []环球速看:投保基金缴纳比例是什么
- []全球观速讯丨石墨烯手机概念股票龙头一览表,2023石墨烯手机相关上市公司有哪些
- []全球微动态丨新能源车出口强势增长特征延续,3月车市有望持续升温
- []全球百事通!"14苏国资MTN001"将支付本年利息 票面利率6.50%
- []财面儿丨绿地香港1-2月集团合约销售约人民币22.28亿元 同比增长10.9%
- []每日消息!郑州建投集团10亿元中期票据将付息 利率4.28%
- []ST摩登索赔案一审判决已有投资者胜诉 律师明确可索赔区间
- []今日热议:即墨旅投6亿中期票据将到期兑付 利率4.32%
- []家居丨亚厦股份控股股东亚厦控股质押4300万股,占总股本3.21%
- []东方雨虹:截至2023年3月10日,公司股东总数为146,253户
- []招商南油:alalei86,目前公司生产经营情况一切正常
- []天天通讯!邯郸曲周:研究生团队进村入户 宣讲党的二十大精神
- []【独家焦点】美元加息影响,有以下四点
- []债券资金项目是什么意思
- []如何购买外币,在相关银行APP购买
- []蚂蚁金服概念股票龙头一览表,2023蚂蚁金服相关上市公司有哪些
- []隔离保险在哪买,有以下三种方法
- []成都推出12个保租房项目共8200套房源 累计已筹集207个项目
- []通讯!"20中天金融MTN001"完成要素变更 15亿元本金兑付延期5年
- []重药控股:截至2023年3月10日,公司股东总数为44399户
- []环球快讯:善水科技:公司目前正在进行部分设备安装及调试工作,公司将积极推动试生产前准备工作,争取加快进行试生产
- []天天短讯!西安市雁塔区城投集团30亿元私募债券项目更新至“已反馈”
- []汇丰回应收购硅谷银行英国子公司:能加强在英商业银行特许经营权
- []环球快资讯丨漳州发展:截止2023年3月10日,公司股东人数约为4.9万户
- []天天快看:招商积余福建公司中标漳州4个城市公共服务项目
- []环球微头条丨gdp排名全国2021前十,超过10万亿的有2个
- []长期存钱哪个银行最好,选择大银行存钱最好
- []洞察市场需求,箭牌家居开创创新发展新路径
- B站注册资本增幅400%至5亿 目前由陈睿全资持股
- 光源资本出任独家财务顾问 沐曦集成电路10亿元A轮融资宣告完成
- 巨轮智能2021年上半年营收11.24亿元 期内研发费用投入增长19.05%
- 红枣期货尾盘拉升大涨近6% 目前红枣市场总库存约30万吨
- 嘉银金科发布2021年Q2财报 期内净利润达1.27亿元同比增长208%
- 成都银行2021上半年净利33.89亿元 期内实现营收同比增长17.27亿元
- 汽车之家发布2021年第二季度业绩 期内新能源汽车品牌收入增长238%
- 中信银行上半年实现净利润290.31亿元 期末不良贷款余额706.82亿元
- 光伏概念掀起涨停潮交易价格创新高 全天成交额达1.29亿元
- 上半年生物药大增45% 关键财务指标好转营收账款持续下降
- 每日时讯!美国非农数据与黄金的关系
- 全球速读:没工作可以贷款吗,可以
- 全球观速讯丨人民币缩水贬值对楼市什么影响
- 解锁千面生活的秘辛——宁波阪急春日时尚大赏
- 瑞金市城市发展投资集团10亿公司债即将付息 票面利率6.80%
- 合肥新鸿安商城烂尾近30年将实施拆迁 采取货币补偿、产权调换等方案
- 天天观焦点:惠誉确认新鸿基地产的长期发行人违约评级为「A」
- 全球聚焦:ST国华:公司会结合相关法律法规以及公司实际情况进行综合考虑
- 【世界聚看点】北京建工拟发行超短期融资券及中票共52亿元 用于偿还有息负债
- 今日热议:今日散户抢筹的50只个股
- 远兴能源:截止2023年3月10日,公司股东人数为93,260户
- 世界观速讯丨旺能环境:目前是立鑫项目负责动力电池回收再生,一期的产能是3000金吨的钴镍,1000吨的碳酸锂
- 南京安居建设集团10亿公司债即将兑付及摘牌 利率3.85%
- 世界快看点丨今日主力资金流入的前十大板块
- 箭牌“一起绿”事件,洞察中国品牌江河万古流
- 全球速看:电信手机充q币没用了(电信手机充q币)
- 今头条!年轻人带火赏花游 ,00后排名第三占比两成
- 天天即时看!工行活期存款利率表2022最新,利率为0.3%
- 【环球新要闻】中国银行活期利率
- 到底是账户还是帐户
- 全球关注:苏州园区公积金贷款,简单五步轻松办理
- 箭牌卫浴X广州设计周 | 用智慧去探寻生活可能
- 【环球时快讯】银行卡维护中是啥意思,银行系统正在进行升级
- 天天通讯!杭州良渚文化城集团完成发行15亿短期融资券 利率3.0%
- 环球热文:3月13日勤上股份涨停分析:在线教育,智慧城市,智慧灯杆概念热股
- 拼多多跨境电商Temu计划3月25日上线英国站点
- 3月13日四川黄金涨停分析
- 青岛:推进历史城区保护更新、5A景区创建和老城区申遗 年度投资28.3亿元
- 佛山出台举措推进制造业发展 支持企业开展并购实现换道发展
- 杰恩设计:截至2023年3月10日,公司股东总户数为4,758户
- 广西南方鸿基投资所持鸿基物业100%股权将拍卖 起拍价350万元
- 环球热文:百度文心一言生态圈再扩大,把握商业化落地投资机会
- 3月13日用友网络涨停分析:信创,国产软件,数字经济概念热股
- 建行补卡流程,分以下七点
- 中国农业银行存款利率2022,各类存款利率一览
- 世界今头条!酒店代订,正途还是骗局?
- 全球消息!云南旅游依然火热,旅行社却没赚到钱?
- 今日观点!留抵退税什么意思
- 焦点消息!中国银行兑换外币流程,有以下四步
- 天天热门:国债逆回购如何操作及操作技巧
- 全球快讯:荣盛按下复产“加速键”,奋力抢工期,全力保交付
- 焦点讯息:一季度净利最高预增逾两倍,天合光能“辛苦钱”还能赚多久?
- 天天百事通!「美联楼价指数」连升9周
- 热头条丨贝壳整装品牌"被窝家装"总部旗舰店开业 面积扩增至6100㎡
- 天天视讯!广西2022年住房公积金提取434.64亿元 住房消费占78.09%
- 天天关注:国际金价短线或回落至1862美元
- 中科环保:党的二十大进一步强调,推进以人为核心的新型城镇化,加快农业转移人口市民化
- 天天亮点!【BT金融分析师】百度计划将AI全面整合到业务中,分析师称其脚踏实地不像西方企业
- 当前要闻:永顺泰:公司2022年1-9月财务费用主要由汇兑损益及借款利息支出构成
- 世界速读:交银国际信托转让大河西城市棚改35.33%股份 湘潭城乡建设集团接盘
- 全球新消息丨奕东电子:公司按相关规定的时间要求披露年报和季报,具体情况请留意后续披露的定期报告
- 招商银行金葵花卡条件,有以下两个条件
- 当前观点:什么是建行纸黄金
- 净值估算是什么意思
- 通货膨胀的影响和后果
- 三维天地助力乳品企业全流程线上智能化管理
- 每日热闻!双创50是什么意思
- 焦点要闻:中国移动投诉中心网站_中国移动投诉中心
- 全球热议:远洋集团12亿公司债将于3月20日到期兑付 利率4.59%
- 环球快资讯丨格力地产:业绩增长与房地产回暖有关 重组工作正在抓紧审计评估
- 热讯:一个月HIBOR连升7日
- 视焦点讯!济南大明湖悦苑酒店3月12日开业 共配置客房97间
- 天天热门:一张图:黄金原油外汇股指"枢纽点+多空占比"一览(2023/03/13周一)
- 动态:利好黄金!三天内两家美国银行倒闭,高盛不再预测美联储本月加息
- 今头条!长缆科技:对220kV/3kA?超导电缆终端系统,公司与相关的科研院所合作,开展了理论研究和前期调研
- 全球快看:中科环保:截至2月28日,公司股东人数为59,625户
- 环球热消息:绿地香港首2月合约销售额约22.28亿元 同比增长11%
- 【世界热闻】平均工资指数怎么算
- 天天观焦点:股票元旦节休市几天2023,休市三天
- 全球最资讯丨建行短信服务费 建行短信通知服务费
- 全球视点!网上兼职可靠吗 网上兼职是真的吗
- 银行pos机怎样收手续费的,各银行pos机手续费一览
- 每日快报!芜湖经开投资完成发行1.1亿中期票据 票面利率3.20%
- 全球要闻:安溪城建集团13亿元私募债券项目更新至“已受理”
- 世界时讯:“21大连万达MTN001”于3月13日起进行回售 并上调利率至6.6%
- 越秀资本完成发行10亿中期票据 票面利率3.15%
- 当前热点-创意信息:公司将积极参与国家数字经济相关建设中,目前数据库及其他业务情况将在定期报告中披露,烦请关注
- 天天微资讯!南昌江旅都市方舟预计今年年中营业
- 天天时讯:麦捷科技:公司截至3月10日的股东户数为40,413
- 速看:2021年产假是158天还是98天,大多数地方是158天
- 天天快消息!人民币升值的影响
- 贡献毛益率 贡献毛益利率的计算公式是什么
- 如何快速办理贷款,有以下两种方法
- 2023全国合作商赋能大会 暨Topmee桃花面品牌升级发布会圆满成功
- 全球新动态:怎样存款利息高,有以下三种方法
- 全球速递!菲律宾旅游局白艾文:“海岛游”2023年在中国市场将最受欢迎
- 快报:樾见西贵 始于天元 北京城建“龙樾系”全新样板间,焕新四环西贵之地
- 世界热头条丨广州知识城集团完成发行10亿短期融资券 票面利率2.6%
- 全球实时:国信期货早评:就业供需改善叠加避险冲击,金银继续反弹
- 每日关注!2月份郑州商品住房销售12583套 同比增长120.31%
- 3月13日汇市观潮:欧元、英镑和日元技术分析
- 【天天快播报】尽管担心利率上升,交易商预计下半年油价达100美元!背后有何驱动因素?
- 通讯!寿光城投投资5亿短期融资券将兑付 票面利率6.50%
- 成都:到2025年新能源汽车产业规模突破1500亿
- 【新要闻】煌上煌:截至2023年3月10日公司股东人数为43, 537人
- 环球今日讯!格力博:公司未在硅谷银行有存款
- 天天报道:避险情绪大增!黄金的投资逻辑该怎么看?
- 焦点热门:中触媒:公司始终按业务的实际需求,对外汇储备进行合理管理
- 【世界热闻】炒股软件有哪些 有哪些炒股软件
- 中国车险十大排名,车险公司排名一览