JavaRush /Java Blog /Random-TW /Java 中的正規表示式
terranum
等級 28
Milan

Java 中的正規表示式

在 Random-TW 群組發布
正規表示式正規表示式是一種可以應用於文字(Java 中的字串)的模式。Java提供了java.util.regex套件來匹配正規表示式。正規表示式與 Perl 程式語言非常相似,並且非常容易學習。正規表示式要么與文字(文字的一部分)匹配,要么不匹配。* 如果正規表示式符合一段文本,那麼我們就可以找到它。** 如果正規表示式是複合的,那麼我們可以很容易地找出正規表示式的哪一部分與文字的哪一部分相符。

第一個例子

正規表示式「[a-z] +」符合文字中的所有小寫字母。 [a-z]表示從az包括在內的任何字符,並且+表示“一個或多個”字符。假設我們提供字串“code 2 learn javatutorial”。如何在 Java 中執行此操作 首先,您必須建立一個範本:
import java.util.regex.*;
Pattern p = Pattern.compile([a-z]+);
接下來,您必須matcher透過在圖表上發送訊息來建立文字:
Matcher m = p.matcher(“code 2 learn java tutorial”);
注意:兩者 都沒有建構函數PatternMatcher我們使用類別方法來建立它們PatternPattern Class:類別物件構成正規表示式的表示。Pattern 類別不提供任何公共建構函數。要建立模板,必須先呼叫公共靜態方法之一,然後該方法傳回類別的物件Pattern。這些方法採用正規表示式作為參數。 Matcher Class:Finder 物件是一個解釋模式並對輸入字串執行匹配操作的引擎。Pattern與類別一樣,Matcher它沒有公共構造函數。您可以透過呼叫類別物件的Matcher方法來取得物件。完成這些步驟後,現在我們有了該類別的實例,我們現在可以檢查是否找到了該模式,如果找到了,在什麼位置等。 如果模式與整個字串匹配,則傳回 true,否則傳回 false。 如果模式與字串的開頭匹配,則傳回 true,否則傳回 false。 如果模式與文字的任何部分匹配,則傳回 true。 matcherPatternMatcher m m.matches()m.lookingAt()m.find ()

尋找匹配

成功匹配後,m.start()將傳回第一個符合的字元的索引,m.end()將傳回最後一個符合的字元的索引加一。如果嘗試不成功並且沒有找到匹配項,m.start()他們m.end()將拋出IllegalStateException
  • 這樣RuntimeException你就不必抓住它。
返回最後一個匹配字符的索引加一可能看起來很奇怪m.end(),但這正是大多數String.
  • 例如,“Now is the time“.substring(m.start(), m.end())
將返回相同的字串。我們來看一下程式碼:
import java.util.regex.*;

public class RegexTest {
    public static void main(String args[]) {
        String pattern = "[a-z]+";
        String text = "code 2 learn java tutorial";
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(text);
        while(m.find()) {
            System.out.print(text.substring(m.start(), m.end()) + "*");
        }
    }
}
Output: code*learn*java*tutorial*

附加方法

如果存在匹配,則:
  • m.replaceFirst(replacement)傳回一個新字串,其中與模式匹配的第一個子字串將被替換為replacement
  • m.replaceAll(replacement)傳回一個新字串,其中與模式匹配的每個子字串都將被替換
  • m.find(StartIndex)尋找從指定索引開始的下一個符合項
  • m.reset()重置模板
  • m.reset(NewText)重置取景器,並給它一個新文字(可能是StringStringBufferCharBuffer

正規表示式語法

  • ^匹配行的開頭。
  • $匹配字串的結尾。
  • .匹配除換行符之外的任何單一字元。使用 m 選項可以匹配換行符。
  • [...]匹配括號中的任何單一字元。
  • [^ ...]匹配不在括號中的任何單一字元。
  • \A啟動整條生產線。
  • \z整行結束。
  • \Z除最後一行終止符外整行的結尾。
  • re*匹配前面的表達式出現 0 次或多次。
  • re+前一個表達式的一個或多個符合項。
  • re?將 0 或 1 與前一個表達式的位置配對。
  • re{n}完全符合 N 前面的表達式出現的次數。
  • re{n,}匹配前面的表達式出現 N 次或多次。
  • re{n, m}匹配前一個表達式至少出現 n 次、最多出現 m 次。
  • a|b匹配 a 或 b。
  • (re)一組正規表示式並記住找到的文字。
  • (?: re)不記住找到的文字的正規表示式群組。
  • (?> re)符合不回傳的獨立模式。
  • \w匹配字母和數字 [a-zA-Z_0-9]。
  • \W這些不是字母或數字。
  • \s匹配空格。相當於[\t\n\r\f]。
  • \S不是空白字元。
  • \d匹配數字。相當於[0-9]。
  • \D與數字不符。
  • \G搭配上一場比賽的點。
  • \n匹配換行符。
  • \b在單字邊界處配對。
  • \B不在單字邊界上匹配。
  • \n, \t, etc.換行符、回車符、製表符等字元。
  • \Q引用 \E 之前的所有字元。
  • \E引用以\Q 開始,結束。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION