Android正則表達(dá)式及Pattern Matcher使用 #Android #Pattern

Pattern Matcher使用

更多見(jiàn):iii.run
眾所周知,在程序開(kāi)發(fā)中鸡岗,難免會(huì)遇到需要匹配混槐、查找、替換轩性、判斷字符串的情況發(fā)生
而這些情況有時(shí)又比較復(fù)雜声登,如果用純編碼方式解決,往往會(huì)浪費(fèi)程序員的時(shí)間及精力。因此捌刮,學(xué)習(xí)及使用正則表達(dá)式碰煌,便成了解決這一矛盾的主要手段。 一個(gè)正則表達(dá)式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)組成的文字模式绅作,它用以描述在查找文字主體時(shí)待匹配的一個(gè)或多個(gè)字符串芦圾。


加入特定限制條件「[]」

  • [a-z] 條件限制在小寫a to z范圍中一個(gè)字符
  • [A-Z] 條件限制在大寫A to Z范圍中一個(gè)字符
  • [a-zA-Z] 條件限制在小寫a to z或大寫A to Z范圍中一個(gè)字符
  • [0-9] 條件限制在小寫0 to 9范圍中一個(gè)字符
  • [0-9a-z] 條件限制在小寫0 to 9或a to z范圍中一個(gè)字符
  • [0-9[a-z]] 條件限制在小寫0 to 9或a to z范圍中一個(gè)字符(交集)

[]中加入后加再次限制條件「[]」

  • [^a-z] 條件限制在非小寫a to z范圍中一個(gè)字符
  • [^A-Z] 條件限制在非大寫A to Z范圍中一個(gè)字符
  • [^a-zA-Z] 條件限制在非小寫a to z或大寫A to Z范圍中一個(gè)字符
  • [^0-9] 條件限制在非小寫0 to 9范圍中一個(gè)字符
  • [^0-9a-z] 條件限制在非小寫0 to 9或a to z范圍中一個(gè)字符
  • [^0-9[a-z]] 條件限制在非小寫0 to 9或a to z范圍中一個(gè)字符(交集)

在限制條件為特定字符出現(xiàn)0次以上時(shí),可以使用「*」

  • J* 0個(gè)以上J
  • .* 0個(gè)以上任意字符
  • J.*D J與D之間0個(gè)以上任意字符

在限制條件為特定字符出現(xiàn)1次以上時(shí)俄认,可以使用「+」

  • J+ 1個(gè)以上J
  • .+ 1個(gè)以上任意字符
  • J.+D J與D之間1個(gè)以上任意字符

Pattern Matcher的例子

查找以Java開(kāi)頭,任意結(jié)尾的字符串

Pattern pattern = Pattern.compile("^Java.*");  
Matcher matcher = pattern.matcher("Java不是人");  
boolean b= matcher.matches();  //當(dāng)條件滿足時(shí)个少,將返回true,否則返回false  
System.out.println(b);  

以多條件分割字符串時(shí)

Pattern pattern = Pattern.compile("[, |]+");  
String[] strs = pattern.split("Java Hello World  Java,Hello,,World|Sun");  
for (int i=0;i<strs.length;i++) {  
    System.out.println(strs[i]);  
}   

文字替換(首次出現(xiàn)字符)

Pattern pattern = Pattern.compile("正則表達(dá)式");  
Matcher matcher = pattern.matcher("正則表達(dá)式 Hello World,正則表達(dá)式 Hello World");  
//替換第一個(gè)符合正則的數(shù)據(jù)  
System.out.println(matcher.replaceFirst("Java"));  

文字替換(全部)

Pattern pattern = Pattern.compile("正則表達(dá)式");  
Matcher matcher = pattern.matcher("正則表達(dá)式 Hello World,正則表達(dá)式 Hello World");  
//替換第一個(gè)符合正則的數(shù)據(jù)  
System.out.println(matcher.replaceAll("Java"));  

文字替換(置換字符)

Pattern pattern = Pattern.compile("正則表達(dá)式");  
Matcher matcher = pattern.matcher("正則表達(dá)式 Hello World,正則表達(dá)式 Hello World ");  
StringBuffer sbr = new StringBuffer();  
while (matcher.find()) {  
    matcher.appendReplacement(sbr, "Java");  
}  
matcher.appendTail(sbr);  
System.out.println(sbr.toString());  

驗(yàn)證是否為郵箱地址

String str="ceponline@yahoo.com.cn";  
Pattern pattern = Pattern.compile("[//w//.//-]+@([//w//-]+//.)+[//w//-]+",Pattern.CASE_INSENSITIVE);  
Matcher matcher = pattern.matcher(str);  
System.out.println(matcher.matches());  

查找html中對(duì)應(yīng)條件字符串

Pattern pattern = Pattern.compile("href=/"(.+?)/"");  
Matcher matcher = pattern.matcher("<a href=/"index.html/">主頁(yè)</a>");  
if(matcher.find())  
  System.out.println(matcher.group(1));  
}  

截取http://地址

Pattern pattern = Pattern.compile("(http://|https://){1}[//w//.//-/:]+");  
Matcher matcher = pattern.matcher("dsdsds<http://dsds//gfgffdfd>fdf");  
StringBuffer buffer = new StringBuffer();  
while(matcher.find()){                
    buffer.append(matcher.group());          
    buffer.append("/r/n");                
System.out.println(buffer.toString());  
}  

替換指定{}中文字

public static String replace(final String sourceString,Object[] object) {  
            String temp=sourceString;      
            for(int i=0;i<object.length;i++){  
                      String[] result=(String[])object[i];  
               Pattern    pattern = Pattern.compile(result[0]);  
               Matcher matcher = pattern.matcher(temp);  
               temp=matcher.replaceAll(result[1]);  
            }  
            return temp;  
}  

以正則條件查詢指定目錄下文件

//用于緩存文件列表  
       private ArrayList files = new ArrayList();  
       //用于承載文件路徑  
       private String _path;  
       //用于承載未合并的正則公式  
       private String _regexp;  
         
       class MyFileFilter implements FileFilter {  
  
             /** 
              * 匹配文件名稱 
              */  
             public boolean accept(File file) {  
               try {  
                 Pattern pattern = Pattern.compile(_regexp);  
                 Matcher match = pattern.matcher(file.getName());                  
                 return match.matches();  
               } catch (Exception e) {  
                 return true;  
               }  
             }  
           }  
         
       /** 
        * 解析輸入流 
        * @param inputs 
        */  
       FilesAnalyze (String path,String regexp){  
           getFileName(path,regexp);  
       }  
         
       /** 
        * 分析文件名并加入files 
        * @param input 
        */  
       private void getFileName(String path,String regexp) {  
           //目錄  
             _path=path;  
             _regexp=regexp;  
             File directory = new File(_path);  
             File[] filesFile = directory.listFiles(new MyFileFilter());  
             if (filesFile == null) return;  
             for (int j = 0; j < filesFile.length; j++) {  
               files.add(filesFile[j]);  
             }  
             return;  
           }  
     
       /** 
        * 顯示輸出信息 
        * @param out 
        */  
       public void print (PrintStream out) {  
           Iterator elements = files.iterator();  
           while (elements.hasNext()) {  
               File file=(File) elements.next();  
                   out.println(file.getPath());      
           }  
       }  
  
       public static void output(String path,String regexp) {  
  
           FilesAnalyze fileGroup1 = new FilesAnalyze(path,regexp);  
           fileGroup1.print(System.out);  
       }  
     
       public static void main (String[] args) {  
           output("C://","[A-z|.]*");  
       }  

Java正則的功用還有很多眯杏,事實(shí)上只要是字符處理夜焦,就沒(méi)有正則做不到的事情存在。(當(dāng)然岂贩,正則解釋時(shí)較耗時(shí)間就是了|||……)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茫经,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子萎津,更是在濱河造成了極大的恐慌卸伞,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锉屈,死亡現(xiàn)場(chǎng)離奇詭異荤傲,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)颈渊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門遂黍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人俊嗽,你說(shuō)我怎么就攤上這事雾家。” “怎么了乌询?”我有些...
    開(kāi)封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵榜贴,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我妹田,道長(zhǎng),這世上最難降的妖魔是什么鹃共? 我笑而不...
    開(kāi)封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任鬼佣,我火速辦了婚禮,結(jié)果婚禮上霜浴,老公的妹妹穿的比我還像新娘晶衷。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布晌纫。 她就那樣靜靜地躺著税迷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锹漱。 梳的紋絲不亂的頭發(fā)上箭养,一...
    開(kāi)封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音哥牍,去河邊找鬼毕泌。 笑死,一個(gè)胖子當(dāng)著我的面吹牛嗅辣,可吹牛的內(nèi)容都是我干的撼泛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼澡谭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼愿题!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蛙奖,我...
    開(kāi)封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤潘酗,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后外永,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體崎脉,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年伯顶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了囚灼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡祭衩,死狀恐怖灶体,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掐暮,我是刑警寧澤蝎抽,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站路克,受9級(jí)特大地震影響樟结,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜精算,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一瓢宦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧灰羽,春花似錦驮履、人聲如沸鱼辙。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)倒戏。三九已至,卻和暖如春恐似,著一層夾襖步出監(jiān)牢的瞬間杜跷,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工蹂喻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留葱椭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓口四,卻偏偏與公主長(zhǎng)得像孵运,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蔓彩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容