Greedy 數量詞 | |
---|---|
X? | X,一次或一次也沒有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超過 m 次 |
預定義字元類 | |
---|---|
. | 任何字元(與行結束符可能匹配也可能不匹配) |
\d | 數字:[0-9] |
\D | 非數字: [^0-9] |
\s | 空白字元:[ \t\n\x0B\f\r] |
\S | 非空白字元:[^\s] |
\w | 單詞字元:[a-zA-Z_0-9] |
\W | 非單詞字元:[^\w] |
字元 | |
---|---|
x | 字元 x |
\\ | 反斜線字元 |
\0n | 帶有八進位制值 0 的字元 n (0 <= n <= 7) |
\0nn | 帶有八進位制值 0 的字元 nn (0 <= n <= 7) |
\0mnn | 帶有八進位制值 0 的字元 mnn(0 <= m <= 3、0 <= n <= 7) |
\xhh | 帶有十六進位制值 0x 的字元 hh |
\uhhhh | 帶有十六進位制值 0x 的字元 hhhh |
\t | 製表符 ('\u0009') |
\n | 新行(換行)符 ('\u000A') |
\r | 回車符 ('\u000D') |
\f | 換頁符 ('\u000C') |
\a | 報警 (bell) 符 ('\u0007') |
\e | 轉義符 ('\u001B') |
\cx | 對應於 x 的控制符 |
忽略大小寫:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
1.方法1:
public class Test {
public static void main(String[] args) throws Exception {
String str="forM";
String regEx="form"; //表示a或f
Pattern p=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE); //表示整體都忽略大小寫
Matcher m=p.matcher(str);
boolean rs=m.find();
System.out.println(rs);
}
}
//方法2:java正規表示式:
(?i)abc 表示abc都忽略大小寫
a(?i)bc 表示bc忽略大小寫
a((?i)b)c 表示只有b忽略大小寫
import java.util.regex.*;
class Regex
{
public static void main(String[] args)
{
String str = "faaafbbdbddd";
String[] strArry = str.split("(.)\\1+");//以連續出現兩次以上的字元為分界點,分割字串
for(String s:strArry)
System.out.println(s);
System.out.println("-------------------------華麗分割線-----------------------------------");
System.out.println(str.replaceAll("(.)\\1+","$1"));//置換匹配的子字串“$”可以用來取第一個引數中的組
System.out.println(str.matches(".*[d]{3}.*"));//判斷整個字串是否匹配
System.out.println("-------------------------華麗分割線-----------------------------------");
String str2 = "aaa,ff,ddd,sdss,dsa,dgdgdg,sss";
String reg = "\\b[a-z]{3}\\b";//取三個連續的,兩邊有邊界分割
Pattern p = Pattern.compile(reg);//匹配規則封裝
Matcher m = p.matcher(str2);//將匹配規則和要匹配的字串組合生成匹配引擎
//System.out.println("m.matches():"+m.matches());這一句會使匹配的遊標後移到第一個不匹配的位置:第一個f
while(m.find())//引擎可以方便的根據自己的字串和匹配規則執行一些操作,比如find:找到下一個匹配的子字串
/*獲取、輸出匹配的欄位、起始位置、終了位置+1*/
System.out.println(m.group()+
"...m.start():"+m.start()+
"...m.end():"+m.end());
}
}
示例三:
1 public class RegTest { 2 public static void main(String[] args) throws Exception { 3 String str="formfirnformsajfowiehongform"; 4 5 String regEx="f.*?m"; // 6 7 Pattern p=Pattern.compile(regEx); //表示整體都忽略大小寫 8 9 Matcher m=p.matcher(str); 10 11 int i = 0; 12 while(m.find()) { 13 System.out.println(m.group()+"------起始位置:"+m.start()+";結束位置"+m.end()+";長度:"+(m.end()-m.start())); 14 i++; 15 } 16 System.out.println("字串form在str中出現的次數為:"+i); 17 18 System.out.println(str.substring(4, 12)); 19 } 20 }