Java正則表達式

正則表達式一般用於字符串匹配、查找、替換、分割。例如:從網頁中找出email地址,IP地址是否正確,從網頁中找出連接等等。

符號 意思
\|反斜槓
\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 前一個匹配的結束
^ 限制開頭 ^java 條件限制爲以Java爲開頭字符
$ 限制結尾 java$ 條件限制爲以java爲結尾字符
. 限制除\n以外任意一個單獨字符 java.. 條件限制爲java後除換行外任意兩個字符
[a-z] 條件限制在小寫a to z範圍中一個字符
[A-Z] 條件限制在大寫A to Z範圍中一個字符
[a-zA-Z] 條件限制在小寫a to z或大寫A to Z範圍中一個字符
[0-9] 條件限制在小寫0 to 9範圍中一個字符
[0-9a-z] 條件限制在小寫0 to 9或a to z範圍中一個字符
[0-9[a-z]] 條件限制在小寫0 to 9或a to z範圍中一個字符(交集)
[^a-z] 條件限制在非小寫a to z範圍中一個字符
[^A-Z] 條件限制在非大寫A to Z範圍中一個字符
[^a-zA-Z] 條件限制在非小寫a to z或大寫A to Z範圍中一個字符
[^0-9] 條件限制在非小寫0 to 9範圍中一個字符
[^0-9a-z] 條件限制在非小寫0 to 9或a to z範圍中一個字符
[^0-9[a-z]] 條件限制在非小寫0 to 9或a to z範圍中一個字符(交集)
* 限制條件爲特定字符出現0次以上,例如, J* 0個以上J;.* 0個以上任意字符;J.*D J與D之間0個以上任意字符
+ 限制條件爲特定字符出現1次以上。 J+ 1個以上J ; .+ 1個以上任意字符; J.+D J與D之間1個以上任意字符。
? 限制條件爲特定字符出現有0或1次以上。例如,JA? J或者JA出現。
{} 限制條件爲連續出現指定次數字符。 例如, J{2} JJ; J{3} JJJ; J{3,} JJJ,JJJJ,JJJJJ…..(3次以上J並存);J{a,b} 有a個以上,b個以下的J
| 限制條件爲兩者取一。例如,Java

舉例

  • 在字符串包含驗證時
Pattern pattern = Pattern.compile("^Java.*");
Matcher matcher = pattern.matcher("Java不是人。");
boolean b = matcher.matches();
System.out.print(b+"");

/**
* 結果爲: true
*/
  • 以多條件分割字符串時
        Pattern pattern = Pattern.compile("[,|]+");
        String[] strs = pattern.split("Java Hello World  Java,Hello,,World|Sun");
        for (String str:strs) {
            System.out.print(str+" ");
        }


        /**
         * 結果爲: Java Hello World  Java Hello World Sun 
         */
  • 文字替換(首次出現字符)
        Pattern pattern = Pattern.compile("正則表達式");
        Matcher matcher = pattern.matcher("正則表達式 Hello World,正則表達式 Hello World");
        System.out.print(matcher.replaceFirst("Java"));


        /**
         * 結果爲: Java Hello World,正則表達式 Hello World
         */
  • 文字替換(全部)
        Pattern pattern = Pattern.compile("正則表達式");
        Matcher matcher = pattern.matcher("正則表達式 Hello World,正則表達式 Hello World");
        System.out.print(matcher.replaceAll("Java"));


        /**
         * 結果爲: Java Hello World,Java Hello World
         */
  • 文字替換(置換字符)
        Pattern pattern = Pattern.compile("正則表達式");
        Matcher matcher = pattern.matcher("正則表達式 Hello World,正則表達式 Hello World");
        StringBuffer sbr = new StringBuffer();
        while (matcher.find()){
            matcher.appendReplacement(sbr,"Java");
        }
        matcher.appendTail(sbr);
        System.out.print(sbr.toString());


        /**
         * 結果爲: Java Hello World,正則表達式 Hello World
         */
  • 驗證是否爲郵箱地址
        String str = "[email protected]";
        Pattern pattern = Pattern.compile("\\w+([-+.]\\w+)*@([\\w\\-]+\\.)+[\\w-]+");
        Matcher matcher = pattern.matcher(str);

        System.out.print(matcher.matches() + "");


        /**
         * 結果爲: true
         */
  • 去除html標記
        Pattern pattern = Pattern.compile("<[^>]+>");
        Matcher matcher = pattern.matcher("<a href=/\"index.html/\">主頁</a>");

        System.out.print(matcher.replaceAll(""));


        /**
         * 結果爲: 主頁
         */
  • 查找html中對應條件字符串
        Pattern pattern = Pattern.compile("href=/\"(.+?)/\"");
        Matcher matcher = pattern.matcher("<a href=/\"index.html/\">主頁</a>");

        if (matcher.find()) {
            System.out.print(matcher.group(1));
        }

        /**
         * 結果爲: index.html
         */
  • 截取http://地址
        Pattern pattern = Pattern.compile("https?://[\\w.]*");
        Matcher matcher = pattern.matcher("dsdsds<http://dsds//gfgffdfd>fdf");

        if (matcher.find()) {
            System.out.print(matcher.group());
        }

        /**
         * 結果爲: http://dsds
         */

比較常用的正則表達式

字符 代表意義
[\u4e00-\u9fa5] 匹配中文字符
\n\s*\r 匹配空白行,可用來刪除空白行
^\s*|\s*$ 匹配首尾空白字符
\w+([-+.]\w+)*@\w+([-+.]\w+)* 驗證Email地址
https?://[^\s]* 匹配URL地址
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章