正則表達(dá)式(regex)
- 定義:用有固定意義的字符(元字符)描述一種字符串匹配規(guī)則的字符串
- 元字符及常見規(guī)則寫法:
- | - |
---|---|
\\\ |
轉(zhuǎn)義字符润讥,輸出一個(gè)\ |
() |
括號(hào)內(nèi)表示一個(gè)整體 |
. |
任何單個(gè)字符 |
\d |
匹配0-9的一個(gè)數(shù)字 |
\D |
非數(shù)字 |
\w |
匹配數(shù)字糜俗、大小寫字母翼闽、以及_ |
\W |
匹配除了\w 以外的字符 |
\s |
空白字符恕洲、空格笛洛、\t 蛤奢、\n 等 |
\S |
非空白字符 |
[abc] |
abc中的任意一個(gè)字母 |
[^abc] |
任何字符除了a奋隶、b俭驮、c |
[a-z] |
匹配a-z小寫字母 |
[a-z][A-Z] |
匹配a-z回溺,A-Z的字母 |
[0-3][7-9] |
匹配0-3或者7-9的數(shù)字 |
? |
1次或0次 |
* |
0次或多次 |
+ |
1次或多次 |
{n} |
恰好n次 |
{n, } |
至少n次 |
{n, m} |
至少n次春贸,單不超過m次 |
\\1 |
表示使用正則表達(dá)式中第一括號(hào)()中的表達(dá)式 |
$1 |
表示取第一個(gè)括號(hào)()中的表達(dá)式匹配的內(nèi)容 |
純數(shù)字
[0-9]+
"\\d+"
合法的電話號(hào)碼
"1[3578][0-9]{9}"
"1[3578]\\d{9}"
重復(fù)出現(xiàn)的字符
"(.)\\1{1, }"
完全匹配
//多次使用同一個(gè)正則表達(dá)式
//創(chuàng)建一個(gè)正則表達(dá)式的對(duì)象
Pattern pattern = Pattern.compile(regex);
//創(chuàng)建匹配對(duì)象
Matcher matcher = pattern.matcher(string);
//結(jié)果
boolean = matcher.matchers();
String string = "he was hello";
String[] stringArray = string.split(" ");
System.out.println(Arrays.toString(stringArray));
stringArray = string.split("\\s+");
System.out.println(Arrays.toString(stringArray));
//判斷是否是合法的手機(jī)號(hào)
string = "12345678901";
boolean isAllNum = string.matches("1[3578][0-9]{9}");
System.out.println(isAllNum);
//根據(jù)正則表達(dá)式替換指定內(nèi)容
string = "fjdklsaj:dfjklsj djfklsa:34219490 jfkdls:dhkjas ";
String newString = string.replaceAll("[0-9]{8}", "*****");
System.out.println(newString);
string = "aaaahahhhhkjklssss";
// \1 表示使用正則表達(dá)式中第一括號(hào)()中的表達(dá)式
// $1表示取第一個(gè)括號(hào)()中的表達(dá)式匹配的內(nèi)容
newString = string.replaceAll("(.)\\1{1,}", "$1");
System.out.println(newString);
全局搜索
//創(chuàng)建一個(gè)正則表達(dá)式的對(duì)象
Pattern p = Pattern.compile("\\w+@\\w+(\\.\\w{2,3})");
//創(chuàng)建匹配器對(duì)象
Matcher matcher = p.matcher("1109846929@qq.com");
//查找是否存在匹配的內(nèi)容
while(matcher.find()) {
//獲取匹配的內(nèi)容
System.out.println(matcher.group());
//表示正則表達(dá)式中第一個(gè)括號(hào)()里匹配的內(nèi)容
System.out.println(matcher.group(1));
}