Java編程之正則表達式

什麼是正則表達式? java

正則表達式就是人爲的定義一些規則,但願計算機按照咱們制定的規則執行。正則表達式主要用於操做字符串 正則表達式

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

  • Pattern類:
  • Matcher類:
  • PatternSyntaxException:

Pattern類:
Pattern對象是一個正則表達式的編譯表示。Pattern類沒有公共構造方法。要建立一個Pattern對象,你必須首先調用其公共靜態編譯方法(Pattern p = Pattern.compile("a*b")),它返回一個Pattern對象。該方法接受一個正則表達式做爲它的第一個參數。
Matcher類:
Matcher對象是對輸入字符串進行解釋和匹配操做的引擎。與Pattern類同樣,Matcher也沒有公共構造方法。你須要調用Pattern對象的matcher方法來得到一個Matcher對象(Matcher m = p.matcher("aaaaab"))。
PatternSyntaxException:
PatternSyntaxException是一個非強制異常類,它表示一個正則表達式模式中的語法錯誤。 函數

正則表達式的語法 ui

字符類
[abc] a、b或c(簡單類)
[^abc] 任何字符,除了a、b或c(否認)
[a-zA-Z] a到z或A到Z,兩頭的字母包括在內(範圍)
[a-d[m-p]] a到d或m到p:[a-dm-p](並集)
[a-z&&[def]] d、e或f(交集)
[a-z&&[^bc]] a到z,除了b和c:[ad-z](減去)
[a-z&&[^m-p]] a到z,而非m到p:[a-lq-z](減去)

預約義字符類
. 任何字符(與行結束符可能匹配也可能不匹配)
\d 數字:[0-9]
\D 非數字:[^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 單詞字符:[a-zA-Z_0-9]
\W 非單詞字符:[^\w]

 

邊界匹配器
^ 行的開頭
$ 行的結尾
\b 單詞邊界
\B 非單詞邊界
\A 輸入的開頭
\G 上一個匹配的結尾
\Z 輸入的結尾,僅用於最後的結束符(若是有的話)
\z 輸入的結尾

Greedy 數量詞
X? X,一次或一次也沒有
X* X,零次或屢次
X+ X,一次或屢次
X{n} X,剛好 n
X{n,} X,至少 n
X{n,m} X,至少 n 次,可是不超過 m

注意:這裏只列出了經常使用的一些語法,具體信息查看文檔 搜索引擎

補充: spa

一、Pattern類的方法摘要 code

方法摘要
static Pattern compile(String regex)
將給定的正則表達式編譯到模式中。
static Pattern compile(String regex, int flags)
將給定的正則表達式編譯到具備給定標誌的模式中。
int flags()
返回此模式的匹配標誌。
Matcher matcher(CharSequence input)
建立匹配給定輸入與此模式的匹配器。
static boolean matches(String regex, CharSequence input)
編譯給定正則表達式並嘗試將給定輸入與其匹配。
String pattern()
返回在其中編譯過此模式的正則表達式。
static String quote(String s)
返回指定String的字面值模式String。
String[] split(CharSequence input)
圍繞此模式的匹配拆分給定輸入序列。
String[] split(CharSequence input, int limit)
圍繞此模式的匹配拆分給定輸入序列。
String toString()
返回此模式的字符串表示形式。

二、Matcher類的方法摘要 對象

方法摘要
Matcher appendReplacement(StringBuffer sb, String replacement)
實現非終端添加和替換步驟。
StringBuffer appendTail(StringBuffer sb)
實現終端添加和替換步驟。
int end()
返回最後匹配字符以後的偏移量。
int end(int group)
返回在之前的匹配操做期間,由給定組所捕獲子序列的最後字符以後的偏移量。
boolean find()
嘗試查找與該模式匹配的輸入序列的下一個子序列。
boolean find(int start)
重置此匹配器,而後嘗試查找匹配該模式、從指定索引開始的輸入序列的下一個子序列。
String group()
返回由之前匹配操做所匹配的輸入子序列。
String group(int group)
返回在之前匹配操做期間由給定組捕獲的輸入子序列。
int groupCount()
返回此匹配器模式中的捕獲組數。
boolean hasAnchoringBounds()
查詢此匹配器區域界限的定位。
boolean hasTransparentBounds()
查詢此匹配器區域邊界的透明度。
boolean hitEnd()
若是匹配器執行的最後匹配操做中搜索引擎遇到輸入結尾,則返回 true。
boolean lookingAt()
嘗試將從區域開頭開始的輸入序列與該模式匹配。
boolean matches()
嘗試將整個區域與模式匹配。
Pattern pattern()
返回由此匹配器解釋的模式。
static String quoteReplacement(String s)
返回指定String的字面值替換String。
Matcher region(int start, int end)
設置此匹配器的區域限制。
int regionEnd()
報告此匹配器區域的結束索引(不包括)。
int regionStart()
報告此匹配器區域的開始索引。
String replaceAll(String replacement)
替換模式與給定替換字符串相匹配的輸入序列的每一個子序列。
String replaceFirst(String replacement)
替換模式與給定替換字符串匹配的輸入序列的第一個子序列。
boolean requireEnd()
若是不少輸入均可以將正匹配更改成負匹配,則返回 true。
Matcher reset()
重置匹配器。
Matcher reset(CharSequence input)
重置此具備新輸入序列的匹配器。
int start()
返回之前匹配的初始索引。
int start(int group)
返回在之前的匹配操做期間,由給定組所捕獲的子序列的初始索引。
MatchResult toMatchResult()
做爲 MatchResult 返回此匹配器的匹配狀態。
String toString()
返回匹配器的字符串表示形式。
Matcher useAnchoringBounds(boolean b)
設置匹配器區域界限的定位。
Matcher usePattern(Pattern newPattern)
更改此Matcher用於查找匹配項的Pattern。
Matcher useTransparentBounds(boolean b)
設置此匹配器區域邊界的透明度。

案例: 索引

package cc.enfp.regex;

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

public class PatternTest
{
    /*
            正則獲取
    Pattern p = Pattern.compile("a*b");
    Matcher m = p.matcher("aaaaab");
    boolean b = m.matches();
    
    一、首先按面向對象的思惟,把正則表達式封裝成類Pattern,可是該類沒有構造函數,只能經過他的靜態方法獲取該類的實例
    二、經過正則兌現獲取匹配器,由於匹配器須要依靠正則表達式和字符串,因此說須要把字符串做爲參數傳遞給匹配器對策方法
    三、經過匹配器的相應方法完成想要的操做
    */
    public static void main(String[] args)
    {
	String str = "huan ying lai guang lin";
	/**
	 * 查找出三個字母組成的單詞
	 * 注意這裏使用了轉義字符'\\'表示'\'
	 */
	Pattern p = Pattern.compile("\\b[a-z]{3}\\b");
	Matcher m = p.matcher(str);
	while(m.find())
	{
	    System.out.println(m.group());
	}
    }
}


輸出結果:
lai
lin
相關文章
相關標籤/搜索