电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

java正則表達式之Pattern與Matcher類詳解

瀏覽:4日期:2022-08-25 16:47:33

Pattern.split方法詳解

/** * 測試Pattern.split方法 */ @Test public void testPatternSplit() { String str = '{0x40, 0x11, 0x00, 0x00}'; // 分割符為:逗號, {,}, 空白符 String regex = '[,{}s]'; Pattern pattern = Pattern.compile(regex); /* * 1. split 方法用于使用正則表達式中的字符分割待匹配的字符串 * * 注意: * 1. 如果分割符位于原字符串的起始位置,則分割的時候,會在起始位置上分割出一個''出來 * 2. 如果有連續(xù)兩個分隔符,則會在這兩個分割符之間分割有一個''出來 * */ System.out.println('----------- split test -----------'); String[] results = pattern.split(str); System.out.println('length :' + results.length); for (int i = 0; i < results.length; i++) { System.out.println('element_' +i + ' :' + results[i]); } System.out.println(Arrays.toString(results)); /* * 2. split方法的limit參數(shù)的意思是使用正則表達式的分割字符將原字符串分為limit個組 * **/ System.out.println('n----------- split limit test -----------'); String[] resultsLimit = pattern.split(str, 2); for (int i = 0; i < resultsLimit.length; i++) { System.out.print(resultsLimit[i]); } }

結果:

----------- split test -----------element_0 :element_1 :0x40element_2 :element_3 :0x11element_4 :element_5 :0x00element_6 :element_7 :0x00[, 0x40, , 0x11, , 0x00, , 0x00]

----------- split limit test -----------0x40, 0x11, 0x00, 0x00}

Matcher的find/find/start/end方法詳解

測試Matcher的find方法:嘗試在目標字符串中查找下一個匹配的字串,需在循環(huán)中迭代。 groupCount :返回當前查找所獲得的匹配組的數(shù)量,不包括整個整個正則表達式的匹配。 比如,表達式有兩個子分組,則groupCount == 2 group(i):指的是用()包含的子分組,按照定義的順序標識下標,當正則表達式中使用 |連接分組,那么有的分組匹配的字串可能為null。 start(group):返回此子分組匹配的子串在原字符串中的起始位置(包含) end(group):返回此子分組匹配的子串在原字符串中的結束位置(不包含) 即子分組匹配的字符串在原字符串的位置為 [start(i),end(i)),左閉右開。

@Test public void testMatcherGroupFindStartEnd() { String str = '{0x40, 0x31, 0x20, 0x00}'; String regex = '([A-Za-z0-9]+)(,)'; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(str); // 對于在整個原字符串中,找到的下一個匹配的字串 while (matcher.find()) { // 輸出groupCount的數(shù)量 System.out.println('groupCount : ' + matcher.groupCount()); // 0-輸出整個匹配 System.out.println('the substring of contains all group : ' + matcher.group(0)); System.out.println('group_0 start index : ' + matcher.start(0) + ' end :' + matcher.end(0)); // 依次輸出子分組的匹配結果 // 如果子分組之間是通過 | 來連接的,則子分組的匹配結果有的為null for (int i = 1; i <= matcher.groupCount(); i++) { System.out.println('group_' + i + ':' + matcher.group(i)); System.out.println('group_' + i + ' start index : ' + matcher.start(i) + ' end :' + matcher.end(i)); } } }

結果:

groupCount : 2the substring of contains all group : 0x40,group_0 start index : 1 end :6group_1:0x40group_1 start index : 1 end :5group_2:,group_2 start index : 5 end :6groupCount : 2the substring of contains all group : 0x31,group_0 start index : 7 end :12group_1:0x31group_1 start index : 7 end :11group_2:,group_2 start index : 11 end :12groupCount : 2the substring of contains all group : 0x20,group_0 start index : 13 end :18group_1:0x20group_1 start index : 13 end :17group_2:,group_2 start index : 17 end :18

Matcher的replace/append方法詳解

測試Matcher的匹配替換以及追加的方法:

matcher.replaceAll方法 :替換在原字符串中所有被正則表達式匹配的字串,并返回替換之后的結果 matcher.replaceFirst方法 :替換在原字符串中第一個被正則表達式匹配的字串,并返回替換之后的結果 matcher.appendReplacement方法 : 將當前匹配子串替換為指定字符串,并且將替換后的子串以及其之前到上次匹配子串之后的字符串段添加到一個StringBuffer對象里(需while(matcher.find())進行配合迭代) matcher.appendTail(StringBuffer sb) 方法則將最后一次匹配工作后剩余的字符串添加到一個StringBuffer對象里。

3和4的結合能夠實現(xiàn)將原字符串中的某些字串替換指定字符,并返回完成替換之后的結果

@Test public void testMatcherReplaceAppend() { String str = '{0x40, 0x31, 0x20, 0x00}'; String regex = '([0-9A-Za-z]+)'; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(str); // replaceAll System.out.println('----------- replace all test ----------'); String replacedAllStr = matcher.replaceAll('replace'); System.out.println('replaced : ' + replacedAllStr); //matcher.reset(str); // 重置被matcher的字符串 matcher.reset(); // 重置matcher,以實現(xiàn)對原字符串重新搜索 // replaceFirst System.out.println('------------ replace first test ---------'); String replacedFirstStr = matcher.replaceFirst('replace'); System.out.println('replaced first : ' + replacedFirstStr); matcher.reset(); // appendReplacement System.out.println('------------- appendReplacement test ------------'); StringBuffer appendRepStr = new StringBuffer(); while (matcher.find()) { matcher.appendReplacement(appendRepStr,'0xffff'); } System.out.println(appendRepStr); // 最后調用appendTail將匹配剩余的字符串添加都StringBuffer的末尾 // 注意這時要實現(xiàn)完整的功能:將所有匹配的內容替換并添加到appendRepStr中,剩余未匹配的繼續(xù)添加到 // appendRepStr中,相當于對原字符串進行全部的替換 // 此時要保證,在遍歷所有匹配的字串后調用appendTail方法 System.out.println('------------ appendTail test ---------------'); matcher.appendTail(appendRepStr); System.out.println(appendRepStr); }

結果:

----------- replace all test ----------replaced : {replace, replace, replace, replace}------------ replace first test ---------replaced first : {replace, 0x31, 0x20, 0x00}------------- appendReplacement test ------------{0xffff, 0xffff, 0xffff, 0xffff------------ appendTail test ---------------{0xffff, 0xffff, 0xffff, 0xffff}

測試文件源碼地址

https://github.com/zhanglbjames/exercises/blob/master/src/test/java/huawei_8_16/TestT1.java

1-匹配字符類

方括號一次只能匹配括號內的一個字符

[abc]

a, b, or c (簡單類)

[^abc]

除了a、b或c之外的任意 字符(求反)

[a-zA-Z]

a到z或A到Z ,包含(范圍)

[a-zA-Z0-9]

匹配一次所有數(shù)字和字母的類型

[a-b-r]

匹配 a-b ,連接符 -,r注意如果想要連接符起到范圍的作用,應該滿足如下格式[a-bc-de-gf-k]即每個連接符占用的字符不能被其他連接符占用

圓括號一次匹配多個字符

比如方括號的正則表達式't[aeio]n'只匹配'tan'、'Ten'、'tin'和'ton',只能匹配單個字符,不能匹配'taeion' 圓括號可以一次匹配多個字符,比如使用't(a|e|i|o|oo)n'正則表達式,可以匹配'taen','tan','taeiooon'等 也可以配合[]使用,如正則為't([aei]|o|oo)n',則可以匹配 'taon','teoon',但是不能匹配'taeioon'

2-預定義字符類

. 匹配除換行符 n 之外的任何單字符

比如:表達式就是“t.n”,它匹配“tan”、“ten”、“tin”和“ton”,還匹配“t#n”、“tpn”甚至“t n”。

d 數(shù)字: [0-9] D 非數(shù)字: [^0-9] s 空格符: [ tnx0Bfr] S 非空格符: [^s] w 單詞字符: [a-zA-Z_0-9] W 非單詞字符: [^w]

記憶規(guī)則 大寫表示取反,小寫如下記憶

d:digit(數(shù)字)s:space(空白字符)w:word(單詞字符), 注意包括下劃線

3-表達式匹配次數(shù)

* 0次或者多次(允許0次的貪婪匹配)

例如,zo* 能匹配 'z' 以及 'zoo'。* 等價于{0,}

+ 1次或者多次(貪婪匹配)

例如,’zo+’ 能匹配 'zo' 以及 'zoo',但不能匹配 'z'。+ 等價于 {1,}。

? 0次或者1次 (非貪婪匹配,允許0次)

例如,'do(es)?' 可以匹配 'do' 或 'does' 。? 等價于 {0,1}。

{n} 恰好n次

{n,m} 從n次到m次

{n,} 至少n次

注意上述n為非負數(shù)

4-特殊字符需要轉義

java正則表達式之Pattern與Matcher類詳解

總結

到此這篇關于java正則表達式之Pattern與Matcher類的文章就介紹到這了,更多相關java正則表達式Pattern與Matcher類內容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Java
相關文章:
主站蜘蛛池模板: 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 苏州同创电子有限公司 - 四探针测试仪源头厂家 | 西安展台设计搭建_西安活动策划公司_西安会议会场布置_西安展厅设计西安旭阳展览展示 | 济南侦探调查-济南调查取证-山东私家侦探-山东白豹调查咨询公司 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 翰墨AI智能写作助手官网_人工智能问答在线AI写作免费一键生成 | 武汉森源蓝天环境科技工程有限公司-为环境污染治理提供协同解决方案 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 日本东丽膜_反渗透膜_RO膜价格_超滤膜_纳滤膜-北京东丽阳光官网 日本细胞免疫疗法_肿瘤免疫治疗_NK细胞疗法 - 免疫密码 | UV固化机_UVLED光固化机_UV干燥机生产厂家-上海冠顶公司专业生产UV固化机设备 | 洁净棚-洁净工作棚-无菌室-净化工程公司_北京卫护科技有限公司 | 避光流动池-带盖荧光比色皿-生化流动比色皿-宜兴市晶科光学仪器 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 | 亿诺千企网-企业核心产品贸易| 对夹式止回阀厂家,温州对夹式止回阀制造商--永嘉县润丰阀门有限公司 | 山东艾德实业有限公司| 济南货架定做_仓储货架生产厂_重型货架厂_仓库货架批发_济南启力仓储设备有限公司 | 金联宇电缆|广东金联宇电缆厂家_广东金联宇电缆实业有限公司 | 地磅-地秤-江阴/无锡地磅-江阴天亿计量设备有限公司_ | 高压包-点火器-高压发生器-点火变压器-江苏天网 | 热镀锌槽钢|角钢|工字钢|圆钢|H型钢|扁钢|花纹板-天津千百顺钢铁贸易有限公司 | 便携式表面粗糙度仪-彩屏硬度计-分体式粗糙度仪-北京凯达科仪科技有限公司 | 【北京写字楼出租_写字楼租赁_办公室出租网/出售】-远行地产官网 | 不锈钢轴流风机,不锈钢电机-许昌光维防爆电机有限公司(原许昌光维特种电机技术有限公司) | 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 北京律师事务所_房屋拆迁律师_24小时免费法律咨询_云合专业律师网 | 济南冷库安装-山东冷库设计|建造|冷库维修-山东齐雪制冷设备有限公司 | 阴离子_阳离子聚丙烯酰胺厂家_聚合氯化铝价格_水处理絮凝剂_巩义市江源净水材料有限公司 | 千淘酒店差旅平台-中国第一家针对TMC行业的酒店资源供应平台 | 天津试验仪器-电液伺服万能材料试验机,恒温恒湿标准养护箱,水泥恒应力压力试验机-天津鑫高伟业科技有限公司 | 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 广东护栏厂家-广州护栏网厂家-广东省安麦斯交通设施有限公司 | 重庆中专|职高|技校招生-重庆中专招生网 | 工业冷却塔维修厂家_方形不锈钢工业凉水塔维修改造方案-广东康明节能空调有限公司 | 锻造液压机,粉末冶金,拉伸,坩埚成型液压机定制生产厂家-山东威力重工官方网站 | 新型锤式破碎机_新型圆锥式_新型颚式破碎机_反击式打沙机_锤式制砂机_青州建源机械 | 石家庄网站建设|石家庄网站制作|石家庄小程序开发|石家庄微信开发|网站建设公司|网站制作公司|微信小程序开发|手机APP开发|软件开发 | 安徽免检低氮锅炉_合肥燃油锅炉_安徽蒸汽发生器_合肥燃气锅炉-合肥扬诺锅炉有限公司 | 定做大型恒温循环水浴槽-工业用不锈钢恒温水箱-大容量低温恒温水槽-常州精达仪器 | 无轨电动平车_轨道平车_蓄电池电动平车★尽在新乡百特智能转运设备有限公司 |