Java正規表示式簡單介紹
正規表示式是電腦科學的一個概念,通常用於檢索。替換符合某個規則的文字。使用正規表示式,我們能夠以程式設計的方式,構造複雜的文字模式,並對輸入的字串進行搜尋。一旦找到了匹配這些模式的部分,就能對其進行進一步的處理。
簡單示例
public class Main {
public static void main(String[] args) {
//匹配帶正號的數值
System.out.println("+123".matches("\\+\\d+"));
String str = "12321asdf1231dsfe532";
//按英文字元分割
for (String tmp : str.split("[a-zA-Z]+")) {
System.out.println(tmp);
}
}
}
輸出
true
12321
1231
532
基礎
正規表示式其實就是以某種方式來描述字串。與其他的語言有所不同,“\”在其他語言的正規表示式中通常表示一個普通的反斜槓,而在Java中,其表示一個正規表示式的反斜槓,其後的字元就有特殊意義。舉例來說,“\\”表示一個普通的反斜槓,“\d”表示一位數字。其中換行和製表符之類的是特例,直接使用“\n\r”即可。
建立正規表示式
列舉部分常用的構造集。
字元
正規表示式 | 含義 |
---|---|
B | 表示字元B |
\xhh | 十六進位制值為oxhh的字元 |
\uhhhh | 十六進位制表示為oxhhhh的Unicode字元 |
\t | 製表符 |
\n | 換行符 |
\r | 回車 |
字元類
正規表示式 | 含義 |
---|---|
[abc] | abc任意字元 |
[^abc] | abc之外的任意字元 |
[a-zA-Z] | a到z或A到Z範圍內的字元 |
[abc[hij]] | abchij任意字元 |
[a-z&&[hij]] | hij任意字元(交集) |
\s | 空白符(空格、tab、換行、換頁和回車) |
\S | 非空白符,同[^\s] |
\d | 任意數字,同[0-9] |
\D | 非數字,同[^0-9] |
\w | 詞字元[a-zA-Z0-9] |
\W | 非詞詞彙,同[^\w] |
邏輯操作符
正規表示式 | 含義 |
---|---|
XY | Y跟在X後面 |
X|Y | X或Y |
(X) | 捕獲組。可以在表示式中用\i引用第i個捕獲組 |
邊界匹配符
正規表示式 | 含義 |
---|---|
^ | 一行的起始 |
$ | 一行的結束 |
\b | 詞的邊界 |
\B | 非詞的邊界 |
\G | 前一個匹配的結束 |
限定詞
正規表示式 | 含義 |
---|---|
X? | 一個或零個X |
X* | 零個或多個X |
X+ | 一個或多個X |
X{n} | 恰好n次X |
X{n,} | 至少n次X |
X{n,m} | X至少n次,且不超過m次 |
表示式X通常應該用圓括號括起來,以便它能夠按照預期的效果執行。
Pattern和Matcher
Java中除了使用String類來使用正規表示式,還提供了功能更為強大的Pattern和Matcher類。一般的使用方法為:
1. 使用Pattern.compile()方法
,根據提供的String型別的正規表示式生成Pattern物件。
2. 將需要檢索的字串傳入Pattern物件的matcher()方法
,生成Matcher物件。
3. 使用Matcher物件進行操作。
簡單示例
public class Main {
public static void main(String[] args) {
//獲取英文單詞
String str = "apple banana orange";
Pattern pattern = Pattern.compile("[a-zA-Z]+");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group() + " start:"
+ matcher.start() + " end:" + matcher.end());
}
}
}
輸出
apple start:0 end:5
banana start:6 end:12
orange start:13 end:19
Matcher
start()、end()
在匹配成功後,start()返回先前匹配的起始位置的索引,而end()返回所匹配的最後字元的索引位置加一的值。
matchers()
matchers()方法用於判斷整個輸入字串是否匹配正規表示式。上述例子中執行System.out.println(matcher.matches());
,將輸出false
。
lookingAt()
lookingAt()方法用於判斷該字串的起始部分是否匹配模式。上述例子中執行System.out.println(matcher.lookingAt());
,將輸出true
。
find()
find()方法類似迭代器中的next(),向前遍歷輸入字串。
find(int start)
find(int start)能夠接受一個整數引數,該整數表示字串中字元的位置,並以其作為搜尋起點。將上述例子修改:
public class Main {
public static void main(String[] args) {
//獲取英文單詞
String str = "apple banana orange";
Pattern pattern = Pattern.compile("[a-zA-Z]+");
Matcher matcher = pattern.matcher(str);
if (matcher.find(2)) {
System.out.println(matcher.group());
}
}
}
輸出
ple
組(group)
組是用括號劃分的正規表示式,可以根據組的編號來引用某個組。組號為0表示整個正規表示式,組號為1表示被第一對括號括起的組,以此類推。以A(B(C))D
為例,共三個組,組0為ABCD,組1為BC,組2為C。
groupCount()
groupCount()返回該匹配器的模式中的分組數目,第0組不包括在內。
group()
group()返回前一次匹配操作的第0組。
group(int i)
group(int i)返回在前一次匹配操作期間指定的組。下面是簡單的示例,第1組為\\d+
。
public class Main {
public static void main(String[] args) {
String str = "apple123banana";
Pattern pattern = Pattern.compile("[a-zA-Z]+(\\d+)[a-zA-Z]+");
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.groupCount());
if (matcher.find()) {
System.out.println(matcher.group(1));
}
}
}
輸出
1
123
相關文章
- 簡單介紹python中使用正規表示式的方法Python
- 簡單介紹正規表示式拆分url例項程式碼
- 簡單介紹Idea使用正規表示式批量替換字串的方法Idea字串
- 常用正規表示式匹配程式碼介紹
- 正規表示式單行、多行模式簡介(使用說明)模式
- 超簡單!正規表示式總結
- 正規表示式(java)Java
- java正規表示式Java
- 【java】正規表示式Java
- 正規表示式簡述
- Java常用正規表示式Java
- 正規表示式簡明教程
- 正規表示式中環視的簡單應用示例【基於java】Java
- java正規表示式大全(常用)Java
- java中的正規表示式Java
- Java017-正規表示式Java
- java正規表示式之 groupJava
- java 正規表示式 舉例Java
- Java正規表示式總結Java
- 正規表示式理解及簡單應用舉例
- python正規表示式(簡明版)Python
- Java-正規表示式regex庫Java
- Java 正規表示式——捕獲組Java
- 正規表示式(程式碼java版)Java
- Java 正規表示式例項操作Java
- re正規表示式庫的簡介、入門、使用方法
- 正規表示式
- 正規表示式.
- java 正規表示式語法學習Java
- Java 正規表示式替換斜槓Java
- 正規表示式在Java中的使用Java
- Java 文字檢索神器 "正規表示式"Java
- Java 的正規表示式與爬蟲Java爬蟲
- 【正規表示式】常用的正規表示式(數字,漢字,字串,金額等的正規表示式)字串
- Python正規表示式簡記和re庫Python
- php –正規表示式PHP
- 【Linux】正規表示式Linux
- 【JavaScript】正規表示式JavaScript