a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > regex > 正文

Java正則表達式提取字符的方法實例

2020-01-20 22:07:20
字體:
來源:轉載
供稿:網友

正好遇到一個需求需要將字符串中特定的字符全部提取出來,這個如果是按常規的字符串處理的話非常的繁瑣。于是想到用正則表達式來完成。項目需求是這樣的:需要提取車牌號中最后一個數字,比如說:蘇A7865提取5,蘇A876X提取6

實現方法:

import java.util.regex.Matcher;import java.util.regex.Pattern;public class Test {public static void main(String[] args) {String s = "A876X";// 把要匹配的字符串寫成正則表達式,然后要提取的字符使用括號括起來// 在這里,我們要提取最后一個數字,正則規則就是“一個數字加上大于等于0個非數字再加上結束符”Pattern pattern = Pattern.compile("(//d)[^//d]*$");Matcher matcher = pattern.matcher(s);if(matcher.find())System.out.println(matcher.group(1));}}

關于Matcher 中的幾個方法說明:

Mathcer.start()/ Matcher.end()/ Matcher.group()
當使用matches(),lookingAt(),find()執行匹配操作后,就可以利用以上三個方法得到更詳細的信息.
start()返回匹配到的子字符串在字符串中的索引位置.
end()返回匹配到的子字符串的最后一個字符在字符串中的索引位置.
group()返回匹配到的子字符串

Java代碼示例:

Pattern p=Pattern.compile(“/d+”); Matcher m=p.matcher(“aaa2223bb”); m.find();//匹配2223 m.start();//返回3 m.end();//返回7,返回的是2223后的索引號 m.group();//返回2223Mathcer m2=p.matcher(“2223bb”); m2.lookingAt(); //匹配2223 m2.start(); //返回0,由于lookingAt()只能匹配前面的字符串,所以當使用lookingAt()匹配時,start()方法總是返回0 m2.end(); //返回4 m2.group(); //返回2223Matcher m3=p.matcher(“2223”); //如果Matcher m3=p.matcher(“2223bb”); 那么下面的方法出錯,因為不匹配返回false m3.matches(); //匹配整個字符串 m3.start(); //返回0 m3.end(); //返回3,原因相信大家也清楚了,因為matches()需要匹配所有字符串 m3.group(); //返回2223

說了這么多,相信大家都明白了以上幾個方法的使用,該說說正則表達式的分組在java中是怎么使用的.
start(),end(),group()均有一個重載方法它們是start(int i),end(int i),group(int i)專用于分組操作,Mathcer類還有一個groupCount()用于返回有多少組.

Java代碼示例:

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

現在我們使用一下稍微高級點的正則匹配操作,例如有一段文本,里面有很多數字,而且這些數字是分開的,我們現在要將文本中所有數字都取出來,利用java的正則操作是那么的簡單.

Java代碼示例:

Pattern p=Pattern.compile(“/d+”); Matcher m=p.matcher(“我的QQ是:456456 我的電話是:0532214 我的郵箱是:aaa123@aaa.com”); while(m.find()) { System.out.println(m.group()); }

輸出:

456456
0532214
123

如將以上while()循環替換成

while(m.find()) { System.out.println(m.group()); System.out.print(“start:”+m.start()); System.out.println(” end:”+m.end()); } 

則輸出:

456456
start:6 end:12
0532214
start:19 end:26
123
start:36 end:39

現在大家應該知道,每次執行匹配操作后start(),end(),group()三個方法的值都會改變,改變成匹配到的子字符串的信息,以及它們的重載方法,也會改變成相應的信息.

注意:只有當匹配操作成功,才可以使用start(),end(),group()三個方法,否則會拋出java.lang.IllegalStateException,也就是當matches(),lookingAt(),find()其中任意一個方法返回true時,才可以使用。

以上內容給介紹了Java正則表達式提取字符的方法實例,希望對大家有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美日韩精品综合 | 欧美午夜一区 | 亚洲久久 | 亚洲日韩成人 | 九九精品视频在线观看 | 成人午夜激情 | 欧美综合久久 | 国产毛片在线 | 国产精品久久久久久久久久久久 | 久久综合九九 | 亚洲成色www久久网站瘦与人 | 日韩精品欧美在线 | 日韩最新av| av水蜜桃| 亚州av在线| 欧美1区 | 亚洲自拍一区在线观看 | 男女羞羞视频网站 | 黄色av网站在线 | 色片在线免费观看 | 日韩在线免费 | 久久com| 成人午夜sm精品久久久久久久 | 草草视频在线观看 | 国产99久久 | 日韩精品一区二区三区中文在线 | 在线看黄色av | 中文字幕黄色 | 欧美成人精品一区二区男人看 | 天天看片天天操 | www成人精品 | 日韩中文一区二区三区 | 91精品国产自产91精品 | 国产精品夜夜春夜夜爽久久电影 | 人人草人人看 | 久久九九这里只有精品 | 欧美日韩一二 | 色欧美综合 | 国产区福利 | 久久色av | 亚洲不卡在线观看 |