目錄
站在用戶的角度思考問題,與客戶深入溝通,找到泰順網(wǎng)站設(shè)計與泰順網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名注冊、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋泰順地區(qū)。一、概念
二、正則表達(dá)式語法
三、捕獲組
四、Pattern類與Matcher類
1.matches( )
2.split( )
3.find( )
4.group
5.start( )和end( )
6.replace替換
7.reset( )
8.代碼演示?
五、正則表達(dá)式在Java中的應(yīng)用
1.判斷功能
2.分割功能
3.替換功能
正則表達(dá)式(regex)是一個字符串,由字面值字符和特殊符號組成,是用來描述匹配一個字符串集合的模式,可以用來匹配、替換和拆分字符串。
例如可以檢查一個字符串是否含有某種子字符串、將匹配的子字符串做替換或者從某個字符串中取出符合某個條件的子字符串等。
二、正則表達(dá)式語法字符 | 匹配 | 示例 |
. | 任意單個字符,除換行符外 | jav.匹配java |
[? ] | [ ] 中的任意一個字符 | java匹配j[abc]va |
-? | [ ] 內(nèi)表示字符范圍 | java匹配[a-z]av[a-g] |
^ | 在[ ]內(nèi)的開頭,匹配除[ ]內(nèi)的字符之外的任意一個字符 | java匹配j[^b-f]va?? |
?| | 或 | x|y匹配x或y |
\ | 將下一字符標(biāo)記為特殊字符、文本、反向引用或八進(jìn)制轉(zhuǎn)義符 | \(匹配( |
$ | 匹配輸入字符串結(jié)尾的位置。如果設(shè)置了?RegExp?對象的?Multiline?屬性,$ 還會與"\n"或"\r"之前的位置匹配。 | ;$匹配位于一行及外圍的;號 |
* | 零次或多次匹配前面的字符 | zo*匹配zoo或z |
+ | 一次或多次匹配前面的字符 | zo+匹配zo或zoo |
? | 零次或一次匹配前面的字符 | zo?匹配z或zo |
p{n} | n?是非負(fù)整數(shù)。正好匹配?n次 | o{2}匹配food中的兩個o |
p{n,} | n?是非負(fù)整數(shù)。至少匹配?n?次 | o{2}匹配foood中的所有o |
p{n,m} | M和?n是非負(fù)整數(shù),其中?n<=?m。匹配至少?n次,至多?m次 | o{1,3}匹配fooood中的三個o |
\p{P} | 一個標(biāo)點字符 !"#$%&'()*+,-./:;<=>?@[\]^_'{|}~ | J\p{P}a匹配J?a |
\b | 匹配一個字邊界 | va\b匹配java中的va,但不匹配javar中的va |
\B | 非字邊界匹配 | va\B匹配javar中的va,但不匹配java中的va |
\d | 數(shù)字字符匹配 | 1[\\d]匹配13 |
\D | 非數(shù)字字符匹配 | [\\D]java匹配Jjava |
\w | 單詞字符 | java匹配[\\w]ava |
\W | 非單詞字符 | $java匹配[\\W]java |
\s | 空白字符 | Java 2匹配Java\\s2 |
\S | 非空白字符 | java匹配 j[\\S]va |
\f | 匹配換頁符 | 等效于\x0c和\cL |
匹配換行符 | 等效于\x0a和\cJ |
注意:
1.?捕獲組是把多個字符當(dāng)成一個單獨單元進(jìn)行處理的方法,它通過對括號內(nèi)的字符分組來創(chuàng)建。
捕獲組通過從左到右計算其括號來編號。
例如:在表達(dá)式((A)(B(C))) 中,存在四個這樣的組:
- ((A)(B(C)))
- (A)
- (B(C))
- (C)
2.?捕獲組可以通過調(diào)用matcher對象的groupCount方法來查看表達(dá)式有多少個分組。(groupCount方法返回一個int值,來表示matcher對象當(dāng)前有多少個捕獲組)
3.?還有一個特殊的組零(group(0)),它代表整個表達(dá)式。(該組不包括在groupCount的返回值中)
4.? 以 (?) 開頭的組是純的非捕獲 組,它不捕獲文本,也不針對組合計進(jìn)行計數(shù)。
四、Pattern類與Matcher類1.matches( )Java的正則表達(dá)式是由java.util.regex的Pattern和Matcher類實現(xiàn)的。Pattern對象表示經(jīng)編譯的正則表達(dá)式。靜態(tài)的compile( )方法負(fù)責(zé)將表示正則表達(dá)式的字符串編譯成Pattern對象。
boolean flag = str.matches(regex);
可以快速判斷能否在str中找到regex。
2.split( )String[ ]? ss = s.split(regex);
用regex把字符串分隔開來,返回String數(shù)組。
3.find( )while(matcher.find(i)){
i++;
}
Matcher.find( )的功能是發(fā)現(xiàn)CharSequence里的,與pattern相匹配的多個字符序列。
4.group5.start( )和end( )A(B(C))D 里面有三個組:
group(0) 是 ABCD
group(1) 是 BC
group(2) 是 C
形式為 matcher.group( )
如果匹配成功,start( )會返回此次匹配的開始位置,end( )會返回此次匹配的結(jié)束位置,即最后一個字符的下標(biāo)加一。
如果之前的匹配不成功(或者沒匹配),那么無論是調(diào)用start( )還是end( ),都會引發(fā)一 個IllegalStateException。
6.replace替換matcher.start( );
matcher.end( );
replaceFirst(String replacement)將字符串里,第一個與模式相匹配的子串替換成replacement。
replaceAll(String replacement),將輸入字符串里所有與模式相匹配的子串全部替換成replacement。
7.reset( )String result = s.replaceAll(regex,ss);
String result = s.replaceFirst(regex,ss);
用reset( )方法可以給現(xiàn)有的Matcher對象配上個新的CharSequence。
如果不給參數(shù),reset( )會把Matcher設(shè)到當(dāng)前字符串的開始處。
8.代碼演示?m.reset("java");
package zuoye2;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EXjava {
public static void main(String[] args) {
String example = "This is a small example string";
Pattern pattern = Pattern.compile("\\w+");
//如果想忽略大小寫敏感度,可以使用線面這個語句
//Pattern pattern = Pattern.compile("\\s+",Patttern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(example);
while(matcher.find()) {
System.out.print("start index: "+matcher.start());
System.out.print(" end index: "+ matcher.end()+" ");
System.out.println(matcher.group());
}
//創(chuàng)建一個新的pattern和matcher以用選項卡替換空格s
Pattern replace = Pattern.compile("\\s+");
Matcher matcher2 = replace.matcher(example);
System.out.println(matcher2.replaceAll("\t"));
}
}
五、正則表達(dá)式在Java中的應(yīng)用
1.判斷功能例:判斷輸入的手機號是否為13或者18開頭
package zuoye2;
import java.util.Scanner;
public class EXjava {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("請輸入手機號:");
String str = input.nextLine();
String regex = "1[38]\\d{9}";//用正則表達(dá)式定義手機號規(guī)則
boolean flag = str.matches(regex);
System.out.println("手機號是:"+flag);
input.close();
}
}
2.分割功能例:分割年齡段
package zuoye2;
import java.util.Scanner;
public class EXjava {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String age = "18-30";//定義年齡范圍
String regex = "-";
String[] strArr = age.split(regex);//分割成字符串?dāng)?shù)組
int startage = Integer.parseInt(strArr[0]);
int endage = Integer.parseInt(strArr[1]);
System.out.print("請輸入年齡:");
int a = input.nextInt();
if(a >= startage && a<= endage) {
System.out.println("Yes");
}
else {
System.out.println("No");
}
input.close();
}
}
3.替換功能例:將字符串的數(shù)字替換成 *
package zuoye2;
import java.util.Scanner;
public class EXjava {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String s = "12342javawang2345";
String regex = "\\d";
String ss = "*";
//將字符串里面的數(shù)字替換成*
String result = s.replaceAll(regex, ss);
System.out.println(result);
input.close();
}
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧