正則表示式的規則
A:字元
x 字元 x。舉例:'a'表示字元a
\\ 反斜線字元。
\n 新行(換行)符 ('\u000A')
\r 回車符 ('\u000D')
B:字元類
[abc] a、b 或 c(簡單類)
[^abc] 任何字元,除了 a、b 或 c(否定)
[a-zA-Z] a到 z 或 A到 Z,兩頭的字母包括在內(範圍)
[0-9] 0到9的字元都包括
C:預定義字元類
. 任何字元。我的就是.字元本身,怎麼表示呢? \.
\d 單個數字:[0-9]
\w 單詞字元:[a-zA-Z_0-9]
在正則表示式裡面組成單詞的東西必須有這些東西組成
D:邊界匹配器
^ 行的開頭
$ 行的結尾
\b 單詞邊界
就是不是單詞字元的地方。
舉例:hello world?haha;xixi
E:Greedy 數量詞
X? X,一次或一次也沒有 1=X || 0=X
X* X,零次或多次 0=X || 1+ =X
X+ X,一次或多次 1=X || 1+ =X
System.out.println("546984".matches("3+")); false
System.out.println("13".matches("3+")); false
System.out.println("3".matches("3+")); true
System.out.println("3333".matches("3+")); true
X{n} X,恰好 n 次 n=X
System.out.println("546984".matches("3{2}")); false
System.out.println("543384".matches("3{2}")); false
System.out.println("3333 ".matches("3{2}")); fasle
System.out.println("33".matches("3{2}")); true
X{n,} X,至少 n 次 [ ~ n=<X
X{n,m} X,至少 n 次,但是不超過 m 次 [) n=<X<=m
Pattern類的重要方法:
public static Patterncompile(String regex,int flags):將給定的正則表示式編譯到具有給定標誌的模式中。
public Matchermatcher(CharSequence input):建立匹配給定輸入與此模式的匹配器。
public static boolean matches(String regex, CharSequence input):編譯給定正則表示式並嘗試將給定輸入與其匹配。
matcher的重要方法:
public boolean find():嘗試查詢與該模式匹配的輸入序列的下一個子序列。
public boolean find(int start):重置此匹配器,然後嘗試查詢匹配該模式、從指定索引開始的輸入序列的下一個子序列。
public int start():返回以前匹配的初始索引。
public int end():返回最後匹配字元之後的偏移量。
用Java正則去掉字串中重複出現的字元:
abcde 順序可以不一樣,也就是去掉重複出現的字元
String str = "abcdeabcdeabcdeaaaaaadddddceeeeabcccccccacadaeec";
str = str.replaceAll(reg, "");
System.out.println(str);
str = str.replaceAll("(?s)(.)(?=.*\\1)", "");
(?s)(.)(?=.*\1)
(?s) 開啟單行模式 DOTALL 讓. 號匹配任意字元
(.) 任意字元 並捕獲在第一組
(?=.*\1) 這是斷言, 表示後面內容將是 任意個字元加上第一組所捕獲的內容
這樣子,如果這整個式子匹配到,表示,第一個捕獲組內容在字串中,至少出現兩次,替換為 "" 空串.
進行 全域性替換後, 整個字串所出現的字元將不重複。