原 Java 正則 多子串 匹配 替換

2021-09-01 17:02:08 字數 2451 閱讀 7407

正規表示式異常強大,一直理解不深,用的也不深,這次專案中嘗試,體會到了它的強大之處。字串查詢,匹配,替換,正則無不能做,特別是靈活的運用子串匹配得到的變數值$1,$2,再進行二次處理能夠達到很巧妙的效果。

1. 編譯正規表示式的字面值得到對應的模式pattern物件;

2. 建立匹配給定輸入與此模式的匹配器matcher;

3. 通過匹配器物件執行操作,匹配器物件的方法很豐富,方法之間組合使用更加強大。

public static void main(string args)  really needs some $.";

//生成匹配模式的正規表示式

string patternstring = "\\$\\";

pattern pattern = pattern.compile(patternstring);

matcher matcher = pattern.matcher(template);

stringbuffer sb = new stringbuffer();

while(matcher.find())

//out: garfield really needs some coffee.

system.out.println(sb.tostring());

//對於特殊含義字元"\","$",使用matcher.quotereplacement消除特殊意義

matcher.reset();

//out: cat really needs some beverage.

system.out.println(matcher.replaceall("$1"));

//out: $1 really needs some $1.

system.out.println(matcher.replaceall(matcher.quotereplacement("$1")));

//到得郵箱的字首名。插一句,其實驗證郵箱的正則多種多樣,根據自己的需求寫對應的正則才是王道

string emailpattern = "^([a-z0-9_\\.\\-\\+]+)@([\\da-z\\.\\-]+)\\.([a-z\\.])$";

pattern = pattern.compile(emailpattern);

matcher = pattern.matcher("[email protected]");

//驗證是否郵箱

system.out.println(matcher.find());

//得到@符號前的郵箱名 out: test

system.out.println(matcher.replaceall("$1"));

//獲得匹配值

pattern = pattern.compile("android:(name|value)=\"(.+?)\"");

matcher = pattern.matcher(temp);

while(matcher.find())

}

[...] 位於括號之內的任意字元

[^...] 不在括號之中的任意字元

. 除了換行符之外的任意字元,等價於[^\n]

\w 任何單字字元, 等價於[a-za-z0-9]

\w 任何非單字字元,等價於[^a-za-z0-9]

\s 任何空白符,等價於[\ t \ n \ r \ f \ v]

\s 任何非空白符,等價於[^\ t \ n \ r \ f \ v]

\d 任何數字,等價於[0-9]

\d 除了數字之外的任何字元,等價於[^0-9]

[\b] 乙個退格直接量(特例)

匹配前一項至少n次,但是不能超過m次

匹配前一項n次,或者多次

匹配前一項恰好n次

? 匹配前一項0次或1次,也就是說前一項是可選的. 等價於

+ 匹配前一項1次或多次,等價於

* 匹配前一項0次或多次.等價於

| 選擇.匹配的要麼是該符號左邊的子表示式,要麼它右邊的子表示式

(...) 分組.將幾個專案分為乙個單元.這個單元可由 *、+、?和|等符號使用,而且還可以記住和這個組匹配的字元以供此後引用使用

\n 和第n個分組所匹配的字元相匹配.分組是括號中的子表示式(可能是巢狀的).分組號是從左到右計數的左括號數

^ 匹配的是字元的開頭,在多行檢索中,匹配的是一行的開頭

$ 匹配的是字元的結尾,在多行檢索中,匹配的是一行的結尾

\b 匹配的是乙個詞語的邊界.簡而言之就是位於字元\w 和 \w之間的位置(注意:[\b]匹配的是退格符)

\b 匹配的是非詞語的邊界的字元

郵箱驗證,以前驗證郵箱,網上蒐個正則裝在自己程式裡面就用,其實這是不對的,不同的公司對郵箱的驗證格式是不一樣的,比方說163和qq郵箱註冊,他們要求的格式都不一樣,所以搜乙個正規表示式就去套所有的郵箱格式也是不對的,符合自己的需求的正則才是正確的。

關於正則匹配替換

這段時間在做專案的時候遇到要替換一堆字串中的乙個檔案路徑,其他內容保持不變,最開始是使用的用標點符號去分割字串,找到對應的語句,對該語句直接進行替換,在這其中需要迴圈去處理這個事情。所以這並不是乙個很好的方法,後面經過高人指點 實在是自己有點水,很少接觸正規表示式 這種替換也能夠使用正則替換。上 l...

正則匹配與替換 regexp regsub

正則匹配是使用正規表示式匹配字串的一種方法 在指令碼編寫過程中,經常需要處理一些文字,而這些文字中可能只有部分資訊是有用的,我們需要從文字中提取出這些有用資訊 這時候,就需要編寫特定格式的正規表示式,將文字中符合正規表示式的字串抓取出來,然後對其進行分解 組合 替換等處理,得到符合需求的處理結果。正...

Java常用正則匹配

1 數字 0 9 2 n位的數字 d 3 至少n位的數字 d 4 m n位的數字 d 5 零和非零開頭的數字 0 1 9 0 9 6 非零開頭的最多帶兩位小數的數字 1 9 0 9 0 9 7 帶1 2位小數的正數或負數 d d 8 正數 負數 和小數 d d 9 有兩位小數的正實數 0 9 0 9...