javaRegex的常用案例__java

來源:互聯網
上載者:User
public class Test{     public static void main(String args[]) {            String str="@Shang Hai Hong Qiao Fei Ji Chang";            boolean rs = false;            for(int i=0;i<str.length();i++){                   char z=str.charAt(i);                     if('a' == z || 'F' == z) {                          rs  = true;                          break;                   }else{                          rs= false;                   }            }               System.out.println(rs);          }   }  

      這種方法使用簡單直觀,但是 難以解決複雜的工作,而且代碼量也會增加很多,不利於維護。

 

      這時,我們可以使用Regex來實現這些功能,而且代碼簡單易維護。下面就來介紹了Java中對字串的Regex的幾個常用的功能,具體情況如下所示(其中用到了java.util.regex包):

 

1.Java中在某個字串中查詢某個字元或者某個子字串 Java代碼   String s = "@Shang Hai Hong Qiao Fei Ji Chang";      String regEx = "a|F"; //表示a或F   Pattern pat = Pattern.compile(regEx);   Matcher mat = pat.matcher(s);   boolean rs = mat.find();   

    如果s中有regEx,那麼rs為true,否則為flase。

    如果想在尋找時忽略大小寫,則可以寫成Pattern pat=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);

 

2.在某個檔案中擷取一段字串 Java代碼   String regEx = ".+\(.+)$";   String s = "c:\test.txt";   Pattern pat = Pattern.compile(regEx);   Matcher mat = pat.matcher(s);   boolean rs = mat.find();   for(int i=1;i<=mat.groupCount();i++){     System.out.println(mat.group(i));   }   

  以上的執行結果為test.txt,提取的字串儲存在mat.group(i)中,其中i最大值為mat.groupCount();

 

3.對字串的分割 Java代碼   String regEx=":";   Pattern pat = Pattern.compile(regEx);   String[] rs = pat.split("aa:bb:cc");   

  執行後,r就是{"aa","bb","cc"}

    如果用Regex分割就如上所示,一般我們都會使用下面更簡單的方法: Java代碼   String s = "aa:bb:cc";   String[] rs=s.split(":");   

 

4.字串的替換/刪除 Java代碼   String regEx="@+"; //表示一個或多個@   Pattern pat=Pattern.compile(regEx);   Matcher mat=pat.matcher("@@aa@b cc@@");   String s=mat.replaceAll("#");   

 結果為"##aa#b cc##"
  
 如果要把字串中的@都給刪除,只用要Null 字元串替換就可以了: Java代碼   String s=mat.replaceAll("");  

  結果為"aab cc"

 

 

註:對Pattern類的說明: 
      1.public final class java.util.regex.Pattern是Regex編譯後的表達法。

      下面的語句將建立一個Pattern對象並賦值給控制代碼pat:Pattern pat = Pattern.compile(regEx);
      有趣的是,Pattern類是final類,而且它的構造器是private。也許有人告訴你一些設計模式的東西,或者你自己查有關資料。這裡的結論是:Pattern類不能被繼承,我們不能通過new建立Pattern類的對象。
       因此在Pattern類中,提供了2個重載的靜態方法,其傳回值是Pattern對象(的引用)。如: Java代碼   public static Pattern compile(String regex) {           return new Pattern(regex, 0);   }  

       當然,我們可以聲明Pattern類的控制代碼,如Pattern pat = null;

 

    2.pat.matcher(str)表示以用Pattern去產生一個字串str的匹配器,它的傳回值是一個Matcher類的引用。
       我們可以簡單的使用如下方法:boolean rs = Pattern.compile(regEx).matcher(str).find();

 

 

  常用的Regex:

匹配特定數字:
^[1-9]d*$    //匹配正整數
^-[1-9]d*$   //匹配負整數
^-?[1-9]d*$   //匹配整數
^[1-9]d*|0$  //匹配非負整數(正整數 + 0)
^-[1-9]d*|0$   //匹配非正整數(負整數 + 0)
^[1-9]d*.d*|0.d*[1-9]d*$   //匹配正浮點數
^-([1-9]d*.d*|0.d*[1-9]d*)$  //匹配負浮點數
^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匹配浮點數
^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$   //匹配非負浮點數(正浮點數 + 0)
^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  //匹配非正浮點數(負浮點數 + 0)
評註:處理大量資料時有用,具體應用時注意修正

匹配特定字串:
^[A-Za-z]+$  //匹配由26個英文字母組成的字串
^[A-Z]+$  //匹配由26個英文字母的大寫組成的字串
^[a-z]+$  //匹配由26個英文字母的小寫組成的字串
^[A-Za-z0-9]+$  //匹配由數字和26個英文字母組成的字串
^w+$  //匹配由數字、26個英文字母或者底線組成的字串

在使用RegularExpressionValidator驗證控制項時的驗證功能及其驗證運算式介紹如下:

只能輸入數字:“^[0-9]*$”
只能輸入n位的數字:“^d{n}$”
只能輸入至少n位元字:“^d{n,}$”
只能輸入m-n位的數字:“^d{m,n}$”
只能輸入零和非零開頭的數字:“^(0|[1-9][0-9]*)$”
只能輸入有兩位小數的正實數:“^[0-9]+(.[0-9]{2})?$”<

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.