正則表達式基礎以及Java中使用正則查找 定義: 正則表達式是一些用來匹配和處理文本的字元串 正則的基礎(先大致瞭解下) 1. 正則表達式的作用 1. 查找特定的信息(搜索) 2. 替換一些文本(替換) 2. 正則基礎知識 1. 元字元 . 匹配除換行符(\n)以外的任何單個字元 w 匹配字母、數字 ...
正則表達式基礎以及Java中使用正則查找
定義: 正則表達式是一些用來匹配和處理文本的字元串
正則的基礎(先大致瞭解下)
1. 正則表達式的作用
查找特定的信息(搜索)
替換一些文本(替換)
2. 正則基礎知識
1. 元字元
- . 匹配除換行符(\n)以外的任何單個字元
- w 匹配字母、數字、下劃線、漢字
- s 匹配任意空白字元(包括空格、製表符、換頁符等)
- d 匹配數字,匹配單詞的開始或結束
- ^ 匹配字元串的開始
- $ 匹配字元串的結束
例子:
#匹配abc開頭的字元串
^abd
#匹配8位數字的QQ號
^dddddddd$
#匹配以153開頭的11位數字手機號
^153dddddddd$
2. 重覆限定符
- * 重覆0次或更多次
- + 重覆1次或更多次
- ? 重覆0次或1次
- {n} 重覆n次
- {n,} 重覆n次或更多次
- {n,m} 重覆n到m次
#匹配8位數字QQ號
^d{8}$
#匹配153開頭11位手機號
^(153)d{8}$
#匹配身份證號第7到14位(出生日期)
^d{7,14}$
#匹配以a開頭的,0個或者多個以b結尾的字元串
^ab*$
3. 分組
#匹配字元串中包含0到多個ab開頭
^(ab)*$
4. 條件或
正則用【|】表示或,當滿足分支里任何一種條件時,就會匹配成功
#匹配手機號中聯通的手機(聯通號段130/131/132等)
^(130|131|132)d{8}$
5. 區間
正則提供‘[]’表示區間條件
- [0-9] 限定0到9
- [a-z] 限定a-z
- [165] 限定某些數字
Java中使用正則表達式
這裡會說一個例子:在一段txt文檔中找出所有的網址
Java與正則
1. 這裡有一段100000000(自己數,我也不知道幾個0)行的文本,如圖
2. 高手寫好的匹配url的正則(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]
當然還有n多種方式
3. Java代碼獻上
正則表達式匹配使用方式
/**
* 參數1 regex:我們的正則字元串
* 參數2 就是一大段文本,這裡用data表示
*/
private String filterSpecialStr(String regex, String data) {
//sb存放正則匹配的結果
StringBuffer sb = new StringBuffer();
//編譯正則字元串
Pattern p = Pattern.compile(regex);
//利用正則去匹配
Matcher matcher = p.matcher(data);
//如果找到了我們正則里要的東西
while (matcher.find()) {
//保存到sb中,"\r\n"表示找到一個放一行,就是換行
sb.append(matcher.group() + "\r\n");
}
return sb.toString();
}
4. 這裡增加兩個文件的讀寫
Java讀取文本文件
private String readFile(String pathName) {
//讀取到的文件內容放到這個sb里
StringBuffer sb = new StringBuffer();
//The Java 7 try-with-resources syntax (Automatic Resource Management) is nice (這種寫法是Java7的一種語法,自動管理資源,不理解自行百度)
try (BufferedReader br = new BufferedReader(new FileReader(pathName))) {
String line;
while ((line = br.readLine()) != null) {
sb.append(line + "\r\n");
}
System.out.println("讀取文件完成");
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
Java寫入文本文件
private void writeFile(String pathName, String data) {
try {
//文件不存在的話新建,存在覆蓋
File file = new File(pathName);
file.createNewFile();
//The Java 7 try-with-resources syntax (Automatic Resource Management) is nice
try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) {
bw.write(data);
bw.flush();
System.out.println("文件寫入完成");
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
5. 執行結果
測試代碼
把文檔.txt讀取到Java中,然後處理完,最後寫到我指定的文件中
public static void main(String[] args) {
//0. 準備好正則
String regex = "(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]";
//1. 讀取文檔
String data = readFile("F:\\test\\文檔.txt");
//2. 正則查找
String needData = filterSpecialStr(regex, data);
//3. 寫到某個文件中
writeFile("F:\\test\\needData.txt", needData);
}
結果