Java提取文本文档中的所有网址(小案例介绍正则基础知识)
生活随笔
收集整理的這篇文章主要介紹了
Java提取文本文档中的所有网址(小案例介绍正则基础知识)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
正則表達(dá)式基礎(chǔ)以及Java中使用正則查找
定義: 正則表達(dá)式是一些用來匹配和處理文本的字符串
正則的基礎(chǔ)(先大致了解下)
1. 正則表達(dá)式的作用
查找特定的信息(搜索)
替換一些文本(替換)
2. 正則基礎(chǔ)知識(shí)
1. 元字符
- . 匹配除換行符(\n)以外的任何單個(gè)字符
- w 匹配字母、數(shù)字、下劃線、漢字
- s 匹配任意空白字符(包括空格、制表符、換頁符等)
- d 匹配數(shù)字,匹配單詞的開始或結(jié)束
- ^ 匹配字符串的開始
- $ 匹配字符串的結(jié)束
例子:
#匹配abc開頭的字符串 ^abd#匹配8位數(shù)字的QQ號(hào) ^dddddddd$#匹配以153開頭的11位數(shù)字手機(jī)號(hào) ^153dddddddd$2. 重復(fù)限定符
- * 重復(fù)0次或更多次
- + 重復(fù)1次或更多次
- ? 重復(fù)0次或1次
- {n} 重復(fù)n次
- {n,} 重復(fù)n次或更多次
- {n,m} 重復(fù)n到m次
3. 分組
#匹配字符串中包含0到多個(gè)ab開頭 ^(ab)*$4. 條件或
正則用【|】表示或,當(dāng)滿足分支里任何一種條件時(shí),就會(huì)匹配成功
#匹配手機(jī)號(hào)中聯(lián)通的手機(jī)(聯(lián)通號(hào)段130/131/132等) ^(130|131|132)d{8}$5. 區(qū)間
正則提供‘[]’表示區(qū)間條件
- [0-9] 限定0到9
- [a-z] 限定a-z
- [165] 限定某些數(shù)字
Java中使用正則表達(dá)式
這里會(huì)說一個(gè)例子:在一段txt文檔中找出所有的網(wǎng)址
Java與正則
1. 這里有一段100000000(自己數(shù),我也不知道幾個(gè)0)行的文本,如圖
2. 高手寫好的匹配url的正則(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]當(dāng)然還有n多種方式
3. Java代碼獻(xiàn)上
正則表達(dá)式匹配使用方式
/*** 參數(shù)1 regex:我們的正則字符串* 參數(shù)2 就是一大段文本,這里用data表示*/ private String filterSpecialStr(String regex, String data) {//sb存放正則匹配的結(jié)果StringBuffer sb = new StringBuffer();//編譯正則字符串Pattern p = Pattern.compile(regex);//利用正則去匹配Matcher matcher = p.matcher(data);//如果找到了我們正則里要的東西while (matcher.find()) {//保存到sb中,"\r\n"表示找到一個(gè)放一行,就是換行sb.append(matcher.group() + "\r\n");}return sb.toString(); }4. 這里增加兩個(gè)文件的讀寫
Java讀取文本文件
private String readFile(String pathName) {//讀取到的文件內(nèi)容放到這個(gè)sb里StringBuffer sb = new StringBuffer();//The Java 7 try-with-resources syntax (Automatic Resource Management) is nice (這種寫法是Java7的一種語法,自動(dòng)管理資源,不理解自行百度)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 nicetry (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. 執(zhí)行結(jié)果
測試代碼
把文檔.txt讀取到Java中,然后處理完,最后寫到我指定的文件中
public static void main(String[] args) {//0. 準(zhǔn)備好正則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. 寫到某個(gè)文件中writeFile("F:\\test\\needData.txt", needData); }結(jié)果
轉(zhuǎn)載于:https://www.cnblogs.com/baijinqiang/p/11067033.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Java提取文本文档中的所有网址(小案例介绍正则基础知识)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IT外包概要
- 下一篇: Java反编译器Java Decompi