Java正則表達式


Java正則表達式

正則表達式定義了字符串的模式。

正則表達式可以用來搜索、編輯和處理文本。

正則表達式並不僅限於某一種語言,但是在每種語言中有細微的差別。

正則表達式實例

一個字符串其實就是一個簡單的正則表達式,例如 Hello World 正則表達式匹配“Hello World”字符串。

.(點號)也是一個正則表達式,他匹配任何一個字符如:“a“或者”1“。

Java正則表達式和Perl的是最為相似的。

java.util.regex包主要包括以下三個類:

  • Pattern類:pattern對象是一個正則表達式的編譯表示。Pattern類沒有公共構造方法。要創建一個Pattern對象,你必須首先調用其公共靜態編譯方法,它返回一個Pattern對象。該方法接收一個正則表達式作為它的第一個參數。
  • Matcher類:Matcher對象是對輸入字符串進行解釋和匹配操作的引擎。與Pattern類一樣,Matcher也沒有公共構造方法。你需要調用Pattern對象的Matcher方法來獲得一個Matcher對象。
  • PatternSyntaxException類:PatternSyntaxException是一個非強制異常類,它表示一個正則表達式模式中的語法錯誤。

以下實例中使用了正則表達式 .*chinasouthtiger.* 用於查找字符串中是否包含了 chinasouthtiger 子串:

import java.util.regex.*;
class RegexExample{
public static void main(String []args){
String content="I am noob "+"from chinasouthtiger.com";
String pattern=".*chinasouthtiger.*";
Boolean isMathch=Pattern.matches(pattern,content);
System.out.println("字符串中是否包含了 ‘chinasouthtiger’字符子串?”+isMathch);
}
}

捕獲組

捕獲組是把多個字符當一個單獨單元進行處理的方法,它通過對括號內的字符分組來創建。

例如,正則表達式 (dog) 創建了單一分組,組里包含"d","o",和"g"。

捕獲組是通過從左至右計算其開括號來編號。例如,在表達式((A)(B(C))),有四個這樣的組:

  • ((A)(B(C)))
  • (A)
  • (B(C))
  • (C)

可以通過調用 matcher 對象的 groupCount 方法來查看表達式有多少個分組。groupCount 方法返回一個 int 值,表示matcher對象當前有多個捕獲組。

還有一個特殊的組(group(0)),它總是代表整個表達式。該組不包括在 groupCount 的返回值中。

實例

下面的例子說明如何從一個給定的字符串中找到數字串:

package pkg2020華南虎;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * @author yl
 */
public class RegexMatches {

    public static void main(String[] args) {
        //按指定模式在字符串查找、
        String line = "This order was placed for QT3000! OK?";
        String pattern = "(\\D*)(\\d+)(.*)";
        //創建patteern對象
        Pattern r = Pattern.compile(pattern);
        //現在創建matcher對象
        Matcher m = r.matcher(line);
        if (m.find()) {
            System.out.println("Found value:" + m.group(0));
            System.out.println("Found value:" + m.group(1));
            System.out.println("Found value:" + m.group(2));
            System.out.println("Found value:" + m.group(3));
        }else{
            System.out.println("NO MATCH");
        }
    }
}

正則表達式語法  

在其他語言中,\\ 表示:我想要在正則表達式中插入一個普通的(字面意義)反斜杠

在Java中,\\ 表示:我要插入一個正則表達式的反斜線,所以其后的字符具有特殊的意義。

所以,,在其他語言中(如Perl),一個反斜杠 \ 就足以具有轉義的作用,而在Java正則表達式中則需要有兩個反斜杠才能被解析為其他語言中的轉義作用。也可以簡單的理解在Java的正則表達式中,兩個 \\ 代表其他語言中的一個 \,這也就是為什么表示一位數字的正則表達式是 \\d,而表示一個普通的反斜杠是 \\\\ 。

根據 Java Language Specification 的要求,Java 源代碼的字符串中的反斜線被解釋為 Unicode 轉義或其他字符轉義。因此必須在字符串字面值中使用兩個反斜線,表示正則表達式受到保護,不被 Java 字節碼編譯器解釋。例如,當解釋為正則表達式時,字符串字面值 "\b" 與單個退格字符匹配,而 "\\b" 與單詞邊界匹配。字符串字面值 "\(hello\)" 是非法的,將導致編譯時錯誤;要與字符串 (hello) 匹配,必須使用字符串字面值 "\\(hello\\)"。


 

Matcher類的方法

 

索引方法

研究方法

替換方法

start和end方法

matches和lookingAt方法

replaceFirst和replaceAll方法

appendReplacement和appendTail方法

PatternSyntaxException類的方法

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM