1. 程式人生 > >Java 正則簡單用法

Java 正則簡單用法

leg 常用 gin 反斜杠 private htm code regexp val

正則表達式是一種可以用於模式匹配和替換的規範,一個正則表達式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)組成的文字模式,它 用以描述在查找文字主體時待匹配的一個或多個字符串。正則表達式作為一個模板,將某個字符模式與所搜索的字符串進行匹配。

眾所周知,在程序開發中,難免會遇到需要匹配、查找、替換、判斷字符串的情況發生,而這些情況有時又比較復雜,如果用純編碼方式解決,往往會浪費程序員的時間及精力。因此,學習及使用正則表達式,便成了解決這一矛盾的主要手段。

下面是正則表達式的解釋:

  • // 反斜杠
  • /t 間隔 (‘/u0009‘)
  • /n 換行 (‘/u000A‘)
  • /r 回車 (‘/u000D‘)
  • /d 數字 等價於[0-9]
  • /D 非數字 等價於[^0-9]
  • /s 空白符號 [/t/n/x0B/f/r]
  • /S 非空白符號 [^/t/n/x0B/f/r]
  • /w 單獨字符 [a-zA-Z_0-9]
  • /W 非單獨字符 [^a-zA-Z_0-9]
  • /f 換頁符
  • /e Escape
  • /b 一個單詞的邊界
  • /B 一個非單詞的邊界
  • /G 前一個匹配的結束
  • ^為限制開頭
  1. ^java 條件限制為以Java為開頭字符
  2. $為限制結尾
  3. java$ 條件限制為以java為結尾字符
  4. . 條件限制除/n以外任意一個單獨字符
  5. java.. 條件限制為java後除換行外任意兩個字符
  • 加入特定限制條件「[]」
  1. [a-z] 條件限制在小寫a to z範圍中一個字符
  2. [A-Z] 條件限制在大寫A to Z範圍中一個字符
  3. [a-zA-Z] 條件限制在小寫a to z或大寫A to Z範圍中一個字符
  4. [0-9] 條件限制在小寫0 to 9範圍中一個字符
  5. [0-9a-z] 條件限制在小寫0 to 9或a to z範圍中一個字符
  6. [0-9[a-z]] 條件限制在小寫0 to 9或a to z範圍中一個字符(交集)
  • []中加入^後加再次限制條件「[^]」
  1. [^a-z] 條件限制在非小寫a to z範圍中一個字符
  2. [^A-Z] 條件限制在非大寫A to Z範圍中一個字符
  3. [^a-zA-Z] 條件限制在非小寫a to z或大寫A to Z範圍中一個字符
  4. [^0-9] 條件限制在非小寫0 to 9範圍中一個字符
  5. [^0-9a-z] 條件限制在非小寫0 to 9或a to z範圍中一個字符
  6. [^0-9[a-z]] 條件限制在非小寫0 to 9或a to z範圍中一個字符(交集)

下面幾個簡單的Java正則用例:

 1 public class RegexTest {
 2     public static void main(String[] args) {
 3         String a = "aaaaa";
 4         String b = "11111";
 5         String c = "abc123";
 6         if (a.matches("\\D+")) {
 7             System.out.println("This is first true");
 8         }
 9         if (a.matches("[a-z]+")) {
10             System.out.println("This is second true");
11         }
12         if (a.matches("[A-Z]+")) {
13             System.out.println("This is third true");
14         }
15         if (b.matches("\\d+")) {
16             System.out.println("This is fourth true");
17         }
18         if (b.matches("[0-9]+")) {
19             System.out.println("This is fifth true");
20         }
21         if (c.matches("[a-zA-Z0-9]+")) {
22             System.out.println("This is sixth true");
23         }
24         if (c.matches("\\D+\\d+")) {
25             System.out.println("This is seventh true");
26         }
27     }
28 }

Pattern.compile函數,可以加入控制正則表達式的匹配行為的參數:
Pattern Pattern.compile(String regex, int flag)

flag的取值範圍如下:

Pattern.CANON_EQ 當且僅當兩個字符的"正規分解(canonical decomposition)"都完全相同的情況下,才認定匹配。比如用了這個標誌之後,表達式"a/u030A"會匹配"?"。默認情況下,不考慮"規 範相等性(canonical equivalence)"。

Pattern.CASE_INSENSITIVE(?i) 默認情況下,大小寫不明感的匹配只適用於US-ASCII字符集。這個標誌能讓表達式忽略大小寫進行匹配。要想對Unicode字符進行大小不明感的匹 配,只要將UNICODE_CASE與這個標誌合起來就行了。
Pattern.COMMENTS(?x) 在這種模式下,匹配時會忽略(正則表達式裏的)空格字符(譯者註:不是指表達式裏的"//s",而是指表達式裏的空格,tab,回車之類)。註釋從#開始,一直到這行結束。可以通過嵌入式的標誌來啟用Unix行模式。
Pattern.DOTALL(?s) 在這種模式下,表達式‘.‘可以匹配任意字符,包括表示一行的結束符。默認情況下,表達式‘.‘不匹配行的結束符。

Pattern.MULTILINE

(?m) 在這種模式下,‘^‘和‘$‘分別匹配一行的開始和結束。此外,‘^‘仍然匹配字符串的開始,‘$‘也匹配字符串的結束。默認情況下,這兩個表達式僅僅匹配字符串的開始和結束。

Pattern.UNICODE_CASE
(?u) 在這個模式下,如果你還啟用了CASE_INSENSITIVE標誌,那麽它會對Unicode字符進行大小寫不明感的匹配。默認情況下,大小寫不敏感的匹配只適用於US-ASCII字符集。

Pattern.UNIX_LINES(?d) 在這個模式下,只有‘/n‘才被認作一行的中止,並且與‘.‘,‘^‘,以及‘$‘進行匹配。

 1 import java.io.File;
 2 import java.io.FileFilter;
 3 import java.io.PrintStream;
 4 import java.util.ArrayList;
 5 import java.util.Iterator;
 6 import java.util.regex.Matcher;
 7 import java.util.regex.Pattern;
 8 
 9 public class FilesAnalyze {
10     //用於緩存文件列表
11     @SuppressWarnings("rawtypes")
12     private ArrayList files = new ArrayList();
13     //用於承載文件路徑
14     private String _path;
15     //用於承載未合並的正則公式
16     private String _regexp;
17     class MyFileFilter implements FileFilter {
18        /**
19         * 匹配文件名稱
20         */
21        public boolean accept(File file) {
22         try {
23          Pattern pattern = Pattern.compile(_regexp);
24          Matcher match = pattern.matcher(file.getName());        
25          return match.matches();
26         } catch (Exception e) {
27          return true;
28         }
29        }
30       }
31     /**
32      * 解析輸入流
33      * @param inputs
34      */
35     FilesAnalyze(String path,String regexp){
36       getFileName(path,regexp);
37     }
38     /**
39      * 分析文件名並加入files
40      * @param input
41      */
42     @SuppressWarnings("unchecked")
43     private void getFileName(String path,String regexp) {
44       //目錄
45        _path=path;
46        _regexp=regexp;
47        File directory = new File(_path);
48        File[] filesFile = directory.listFiles(new MyFileFilter());
49        if (filesFile == null) return;
50        for (int j = 0; j < filesFile.length; j++) {
51         files.add(filesFile[j]);
52        }
53        return;
54       }
55     /**
56      * 顯示輸出信息
57      * @param out
58      */
59     @SuppressWarnings("rawtypes")
60     public void print (PrintStream out) {
61       Iterator elements = files.iterator();
62       while (elements.hasNext()) {
63         File file=(File) elements.next();
64           out.println(file.getPath());  
65       }
66     }
67     public static void output(String path,String regexp) {
68       FilesAnalyze fileGroup1 = new FilesAnalyze(path,regexp);
69       fileGroup1.print(System.out);
70     }
71     public static void main (String[] args) {
72       output("D://","[A-z|.]*");
73     }
74 }

http://www.cnblogs.com/shuqi/p/4427693.html這個博主的常用正則表達式比較全,可以深入學習下

Java 正則簡單用法