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

您的位置:首頁技術(shù)文章
文章詳情頁

Java正則表達(dá)式Pattern和Matcher原理詳解

瀏覽:21日期:2022-09-05 11:46:31

這篇文章主要介紹了Java正則表達(dá)式Pattern和Matcher原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

基本使用

Scanner中的使用正則表達(dá)式

//Scanner 支持的分組 Scanner cin=new Scanner('red a bbc').useDelimiter('s*as*'); System.out.println(cin.next()); System.out.println(cin.next());out:redbbc

等同于下面代碼

//等于 正則Scanner cin2=new Scanner('red a bbc');cin2.findInLine('s*'); // findLine 允許存在多個(gè),match()為最終需要匹配的字符串MatchResult result = cin2.match();for (int i = 0; i < result.groupCount(); i++) { System.out.println(result.group(i));}

Pattern:

//基本匹配 boolean b = Pattern.matches('a*b', 'aaaab'); System.out.println(b);

String的aplit的實(shí)現(xiàn)

//按照數(shù)字分割 Pattern p=Pattern.compile('d+'); String[] str=p.split('好456456像:0532214是'); for (int i = 0; i < str.length; i++) { System.out.println(str[i]); }

一般使用Pattern.matches(String regex,CharSequence input)是一個(gè)靜態(tài)方法,用于快速匹配字符串,該方法適合用于只匹配一次,且匹配全部字符串.

Java代碼示例:

Pattern.matches('d+','2223');//返回true Pattern.matches('d+','2223aa');//返回false,需要匹配到所有字符串才能返回true,這里aa不能匹配到 Pattern.matches('d+','22bb23');//返回false,需要匹配到所有字符串才能返回true,這里bb不能匹配到 Pattern p=Pattern.compile('d+'); Matcher m=p.matcher('22bb23'); m.pattern();//返回p 也就是返回該Matcher對(duì)象是由哪個(gè)Pattern對(duì)象的創(chuàng)建的

重點(diǎn):

matches 方法嘗試將整個(gè)輸入序列與該模式匹配。

lookingAt 嘗試將輸入序列從頭開始與該模式匹配。

find 方法掃描輸入序列以查找與該模式匹配的下一個(gè)子序列。

// matches()對(duì)整個(gè)字符串進(jìn)行匹配,只有整個(gè)字符串都匹配了才返回true Pattern p=Pattern.compile('d+'); Matcher m=p.matcher('22bb23'); m.matches();//返回false,因?yàn)閎b不能被d+匹配,導(dǎo)致整個(gè)字符串匹配未成功. Matcher m2=p.matcher('2223'); m2.matches();//返回true,因?yàn)閐+匹配到了整個(gè)字符串 // lookingAt()對(duì)前面的字符串進(jìn)行匹配,只有匹配到的字符串在最前面才返回true Pattern p1=Pattern.compile('d+'); Matcher m3=p1.matcher('22bb23'); m.lookingAt();//返回true,因?yàn)閐+匹配到了前面的22 Matcher m4=p1.matcher('aa2223'); m2.lookingAt();//返回false,因?yàn)閐+不能匹配前面的aa // find()對(duì)字符串進(jìn)行匹配,匹配到的字符串可以在任何位置. Pattern p2=Pattern.compile('d+'); Matcher m5=p2.matcher('22bb23'); m.find();//返回true Matcher m6=p2.matcher('aa2223'); m2.find();//返回true Matcher m7=p2.matcher('aa2223bb'); m3.find();//返回true Matcher m8=p2.matcher('aabb'); m4.find();//返回false

Mathcer.start()/ Matcher.end()/ Matcher.group()

當(dāng)使用matches(),lookingAt(),find()執(zhí)行匹配操作后,就可以利用以上三個(gè)方法得到更詳細(xì)的信息.

start()返回匹配到的子字符串在字符串中的索引位置. end()返回匹配到的子字符串的最后一個(gè)字符在字符串中的索引位置. 即為最后位置加一 group()返回匹配到的子字符串

Java代碼示例:

Pattern p=Pattern.compile('d+'); Matcher m=p.matcher('aaa2223bb'); m.find();//匹配2223 m.start();//返回3 m.end();//返回7,返回的是2223后的索引號(hào) m.group();//返回2223 Mathcer m2=p.matcher('2223bb'); m2.lookingAt(); //匹配2223 m2.start(); //返回0,由于lookingAt()只能匹配前面的字符串,所以當(dāng)使用lookingAt()匹配時(shí),start()方法總是返回0 m2.end(); //返回4 m2.group(); //返回2223 Matcher m3=p.matcher('2223'); //如果Matcher m3=p.matcher('2223bb'); 那么下面的方法出錯(cuò),因?yàn)椴黄ヅ浞祷豧alsem3.matches(); //匹配整個(gè)字符串 m3.start(); //返回0m3.end(); //返回3,原因相信大家也清楚了,因?yàn)閙atches()需要匹配所有字符串 m3.group(); //返回2223

說了這么多,相信大家都明白了以上幾個(gè)方法的使用,該說說正則表達(dá)式的分組在java中是怎么使用的.

start(),end(),group()均有一個(gè)重載方法它們是start(int i),end(int i),group(int i)專用于分組操作,Mathcer類還有一個(gè)groupCount()用于返回有多少組.

Java代碼示例:

Pattern p=Pattern.compile('([a-z]+)(d+)'); Matcher m=p.matcher('aaa2223bb'); m.find(); //匹配aaa2223 m.groupCount(); //返回2,因?yàn)橛?組 m.start(1); //返回0 返回第一組匹配到的子字符串在字符串中的索引號(hào) m.start(2); //返回3 m.end(1); //返回3 返回第一組匹配到的子字符串的最后一個(gè)字符在字符串中的索引位置. m.end(2); //返回7 m.group(1); //返回aaa,返回第一組匹配到的子字符串 m.group(2); //返回2223,返回第二組匹配到的子字符串

驗(yàn)證手機(jī)號(hào)

// 驗(yàn)證手機(jī)號(hào) Pattern compile = Pattern.compile('^[1][3,4,5,7,8][0-9]{9}$'); Matcher matcher1 = compile.matcher('15071089603'); while(matcher1.find()){ System.out.println(matcher1.group()); }/** * 驗(yàn)證手機(jī)號(hào)碼 * * 移動(dòng)號(hào)碼段:139、138、137、136、135、134、150、151、152、157、158、159、182、183、187、188、147、182 * 聯(lián)通號(hào)碼段:130、131、132、136、185、186、145 * 電信號(hào)碼段:133、153、180、189、177 * */ String regex = '^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,1,2,5-9])|(177))d{8}$';

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 滑板场地施工_极限运动场地设计_滑板公园建造_盐城天人极限运动场地建设有限公司 | 超声波焊接机_超音波熔接机_超声波塑焊机十大品牌_塑料超声波焊接设备厂家 | 内窥镜-工业内窥镜厂家【上海修远仪器仪表有限公司】 | 比亚迪叉车-比亚迪电动叉车堆垛车托盘车仓储叉车价格多少钱报价 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 航拍_专业的无人机航拍摄影门户社区网站_航拍网 | 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 宝元数控系统|对刀仪厂家|东莞机器人控制系统|东莞安川伺服-【鑫天驰智能科技】 | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 中国品牌门窗网_中国十大门窗品牌_著名门窗品牌 | 橡胶接头_橡胶软接头_套管伸缩器_管道伸缩器厂家-巩义市远大供水材料有限公司 | 棉柔巾代加工_洗脸巾oem_一次性毛巾_浴巾生产厂家-杭州禾壹卫品科技有限公司 | 无锡装修装潢公司,口碑好的装饰装修公司-无锡索美装饰设计工程有限公司 | 手持式线材张力计-套帽式风量罩-深圳市欧亚精密仪器有限公司 | 煤机配件厂家_刮板机配件_链轮轴组_河南双志机械设备有限公司 | 河北中仪伟创试验仪器有限公司是专业生产沥青,土工,水泥,混凝土等试验仪器的厂家,咨询电话:13373070969 | 冷轧机|两肋冷轧机|扁钢冷轧机|倒立式拉丝机|钢筋拔丝机|收线机-巩义市华瑞重工机械制造有限公司 | 气体热式流量计-定量控制流量计(空气流量计厂家)-湖北南控仪表科技有限公司 | 陕西华春网络科技股份有限公司 | 粒米特测控技术(上海)有限公司-测功机_减速机测试台_电机测试台 | 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 杭州月嫂技术培训服务公司-催乳师培训中心报名费用-产后康复师培训机构-杭州优贝姆健康管理有限公司 | 自动配料系统_称重配料控制系统厂家 | 大功率金属激光焊接机价格_不锈钢汽车配件|光纤自动激光焊接机设备-东莞市正信激光科技有限公司 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 国产液相色谱仪-超高效液相色谱仪厂家-上海伍丰科学仪器有限公司 | 捷码低代码平台 - 3D数字孪生_大数据可视化开发平台「免费体验」 | 德国GMN轴承,GMN角接触球轴承,GMN单向轴承,GMN油封,GMN非接触式密封 | 超声波破碎仪-均质乳化机(供应杭州,上海,北京,广州,深圳,成都等地)-上海沪析实业有限公司 | 中央空调温控器_风机盘管温控器_智能_液晶_三速开关面板-中央空调温控器厂家 | 振动台-振动试验台-振动冲击台-广东剑乔试验设备有限公司 | 重庆波纹管|重庆钢带管|重庆塑钢管|重庆联进管道有限公司 | 全自动包装机_灌装机生产厂家-迈驰包装设备有限公司 | 南京种植牙医院【官方挂号】_南京治疗种植牙医院那个好_南京看种植牙哪里好_南京茀莱堡口腔医院 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 电线电缆厂家|沈阳电缆厂|电线厂|沈阳英联塑力线缆有限公司 | 淄博不锈钢无缝管,淄博不锈钢管-鑫门物资有限公司 | 实战IT培训机构_IT培训班选大学生IT技术培训中心_中公优就业 | 山东太阳能路灯厂家-庭院灯生产厂家-济南晟启灯饰有限公司 | 电销卡_北京电销卡_包月电话卡-豪付网络 | 工业铝型材生产厂家_铝合金型材配件批发精加工定制厂商 - 上海岐易铝业 | 佛山市钱丰金属不锈钢蜂窝板定制厂家|不锈钢装饰线条|不锈钢屏风| 电梯装饰板|不锈钢蜂窝板不锈钢工艺板材厂家佛山市钱丰金属制品有限公司 | 净化板-洁净板-净化板价格-净化板生产厂家-山东鸿星新材料科技股份有限公司 |