日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java提取文本文档中的所有网址(小案例介绍正则基础知识)

發(fā)布時(shí)間:2023/12/10 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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次
    #匹配8位數(shù)字QQ號(hào) ^d{8}$#匹配153開頭11位手機(jī)號(hào) ^(153)d{8}$#匹配身份證號(hào)第7到14位(出生日期) ^d{7,14}$ #匹配以a開頭的,0個(gè)或者多個(gè)以b結(jié)尾的字符串 ^ab*$

    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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。