1. 程式人生 > >Java基礎知識-正則表示式

Java基礎知識-正則表示式

正則表示式:符合一定規則的表示式。
作用:用於專門操作字串。
特點:用於一些特定的符號來表示一些程式碼操作。這樣就簡化書寫。
所以學習正則表示式,就是在學習一些特殊符號的使用。

好處:可以簡化對字串的複雜操作。
弊端:符號定義越多,正則越長,閱讀性越差。

具體操作功能:

1,匹配:String matches方法。用規則匹配整個字串,只要有一處不符合規則,就匹配結束,返回false。

2,切割:String split();
按照疊詞完成切割。為了可以讓規則的結果被重用
可以將規則封裝成一個組。用()完成。組的出現都有編號。
從1開始。 想要使用已有的組可以通過 \n(n就是組的編號)的形式來獲取

3,替換:String replaceAll(regex,str);如果regex中有定義組,可以在第二引數中通過$符號獲取正則表示式中的已有的組。

4,獲取: 將字串中的符合規則的子串取出。用到了Pattern(正則物件)和Matcher(匹配器)物件。

操作步驟:
1,將正則表示式封裝成物件。
2,讓正則物件和要操作的字串相關聯。
3,關聯後,獲取正則匹配引擎。
4,通過引擎對符合規則的子串進行操作,比如取出。
其實String類中的matches方法。用的就是Pattern和Matcher物件來完成的。只不過被String的方法封裝後,用起來較為簡單。但是功能卻單一。
        String str = "ming tian jiu yao fang jia le ,da jia。"
; String reg = "\\b[a-z]{4}\\b"; //將規則封裝成物件。 Pattern p = Pattern.compile(reg); //讓正則物件和要作用的字串相關聯。獲取匹配器物件。 Matcher m = p.matcher(str); //System.out.println(m.matches());//其實String類中的matches方法。用的就是Pattern和Matcher物件來完成的。 //只不過被String的方法封裝後,用起來較為簡單。但是功能卻單一。 //System.out
.println("matches:"+m.matches()); while(m.find())//將規則作用到字串上,並進行符合規則的子串查詢。 { System.out.println(m.group()); //用於獲取匹配後結果。 }

練習:


import java.util.*;
class RegexTest 
{
    public static void main(String[] args) 
    {
//      test_1();
//      ipSort();

        checkMail();
    }



    /*
    需求:對郵件地址進行校驗。

    */
    public static void checkMail()
    {
        String mail = "[email protected]";

        mail = "[email protected]";

        String reg = "[a-zA-Z0-9_][email protected][a-zA-Z0-9]+(\\.[a-zA-Z]+)+";//較為精確的匹配。
        reg = "\\[email protected]\\w+(\\.\\w+)+";//相對不太精確的匹配。

        //mail.indexOf("@")!=-1


        System.out.println(mail.matches(reg));
    }

    /*
    需求:
    將下列字串轉成:我要學程式設計.

    到底用四種功能中的哪一個呢?或者哪幾個呢?
    思路方式:
    1,如果只想知道該字元是否對是錯,使用匹配。
    2,想要將已有的字串變成另一個字串,替換。
    3,想要按照自定的方式將字串變成多個字串。切割。獲取規則以外的子串。
    4,想要拿到符合需求的字串子串,獲取。獲取符合規則的子串。
    */
    public static void test_1()
    {
        String str = "我我...我我...我要..要要...要要...學學學....學學...編編編...程式設計..程.程程...程...程";
        /*
        將已有字串變成另一個字串。使用 替換功能。
        1,可以先將 . 去掉。
        2,在將多個重複的內容變成單個內容。
        */
        str = str.replaceAll("\\.+","");
        System.out.println(str);

        str = str.replaceAll("(.)\\1+","$1");

        System.out.println(str);

    }
    /*
    192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30
    將ip地址進行地址段順序的排序。


    還按照字串自然順序,只要讓它們每一段都是3位即可。
    1,按照每一段需要的最多的0進行補齊,那麼每一段就會至少保證有3位。
    2,將每一段只保留3位。這樣,所有的ip地址都是每一段3位。

    */
    public static void ipSort()
    {
        String ip = "192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30";

        ip = ip.replaceAll("(\\d+)","00$1");
        System.out.println(ip);

        ip = ip.replaceAll("0*(\\d{3})","$1");
        System.out.println(ip);

        String[] arr = ip.split(" ");

        TreeSet<String> ts = new TreeSet<String>();

        for(String s : arr)
        {
            ts.add(s);
        }

        for(String s : ts)
        {
            System.out.println(s.replaceAll("0*(\\d+)","$1"));
        }
    }



}

模擬網頁爬蟲,將郵箱抓取出來

/*
網頁爬蟲(蜘蛛)
*/
import java.io.*;
import java.util.regex.*;
import java.net.*;
import java.util.*;
class RegexTest2 
{
    public static void main(String[] args) throws Exception
    {
        getMails_1();
    }


    public static void getMails_1()throws Exception
    {
        URL url = new URL("http://192.168.1.254:8080/myweb/mail.html");

        URLConnection conn = url.openConnection();

        BufferedReader bufIn = new BufferedReader(new InputStreamReader(conn.getInputStream()));

        String line = null;

        String mailreg = "\\[email protected]\\w+(\\.\\w+)+";
        Pattern p = Pattern.compile(mailreg);



        while((line=bufIn.readLine())!=null)
        {
            Matcher m = p.matcher(line);
            while(m.find())
            {
                System.out.println(m.group());
            }
        }
    }

    /*
    獲取指定文件中的郵件地址。
    使用獲取功能。Pattern  Matcher
    */
    public static void getMails()throws Exception
    {
        BufferedReader bufr = 
            new BufferedReader(new FileReader("mail.txt"));

        String line = null;

        String mailreg = "\\[email protected]\\w+(\\.\\w+)+";
        Pattern p = Pattern.compile(mailreg);



        while((line=bufr.readLine())!=null)
        {
            Matcher m = p.matcher(line);
            while(m.find())
            {
                System.out.println(m.group());
            }
        }
    }
}

相關推薦

Java基礎知識-表示式

正則表示式:符合一定規則的表示式。 作用:用於專門操作字串。 特點:用於一些特定的符號來表示一些程式碼操作。這樣就簡化書寫。 所以學習正則表示式,就是在學習一些特殊符號的使用。 好處:可以簡化對字串的複雜操作。 弊端:符號定義越多

15-python基礎知識-表示式

正則表示式 應用場景 特定規律字串的查詢,切割、替換等 特定格式(郵箱、手機號、IP、URL等)的校驗 爬蟲專案中,提取特定內容 使用原則 只要使用字串函式能夠解決的問題就不要使用正則 正則的效率比較低,同時會降低程式碼的可讀性

JAVA基礎表示式

正則表示式: 我們先從一個需求的實現做起; 現在我們有這樣一個需求:校驗qq號碼.它的要求是必須是5 - 15 位數字並且0不能開頭; 那以我們平時的想法,一定是先獲取qq號碼的字串, 1.然後用if語句判斷,先判斷它的長度,即qqnum.length<=15&&

Java程式設計基礎15——表示式&常用工具類

1_正則表示式的概述和簡單使用 A:正則表示式 是指一個用來描述或者匹配一系列符合某個語法規則的字串的單個字串。其實就是一種規則。有自己特殊的應用。 作用:比如註冊郵箱,郵箱有使用者名稱和密碼,一般會對其限制長度,這個限制長度的事情就是正則表示式做的 B

python基礎表示式

正則表示式是一種特殊的字串模式,用於匹配一組字串。 一: 基礎釋義 \w   匹配大小寫字母或數字或下劃線或漢字 \w+ 後面的+號的作用在前一個字元上,表示一個或多個\w,最少一個 .  匹配除換行符以外的任意字元 \s 匹配任意的空白符 \d 匹

java手機號碼表示式

/** 驗證手機號碼: 移動號碼段:139、138、137、136、135、134、150、151、152、157、158、159、182、183、187、188、147 聯通號碼段:130、131、132、136、185、186、145 電訊號碼段:133、153、180、1

java網頁爬蟲表示式

package cn.itcast.regextest.demo; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOEx

Java中的表示式以及例項

1、 字元  a) x字元x。如‘a’代表字元a  b) \ \反斜線字元用\\代表一個\  c) \n換行符(‘\u000A’)  d) \r回車符(‘\u000D’) 2、 字元類  a) [abc] a、b或c(簡單類)  b) [^abc]除了a、b、c的任何字元  c) [a-zA

Shell基礎 -- 基本表示式

  正則表示式(Regular Expression,通常簡稱為 regex 或 RE)是一種表達方式,可以用它來查詢匹配特定準則的文字。在許多程式語言中都有用到正則表示式,常用它來實現一些複雜的匹配。這裡簡單介紹一下 shell 中常用到的一些正則表示式。 一、什麼是正則表示式   正則表示式是對字串進

06 Java難點攻克-表示式

正則表示式 一, RegExp簡介 **“RegExp”**是正則表示式的縮寫。當檢索某個文字時,可以使用一種模式來描述要檢索的內容。 簡單的模式:可以是一個單獨的字元。 複雜的模式:包括了更多的字元,並可用於解析、格式檢查、替換等等。可以規定字串中的檢索位置,以及要檢索的字元型

python網路基礎表示式

下面是我對正則表示式的一些簡單介紹,它多用於爬蟲,用來定製規則 # 正則表示式匯入模組 import re # match只匹配字串的頭 # re.match(正則表示式,需要處理的字串) re.match(r"hello", "hello world") # 大小寫的匹配 re.m

Java中常用表示式

表示式                    含義  \\                  &

[基礎 18_001] 表示式基礎

文字字元 字元 匹配內容 字母字元 本身 \0 NULL 字元(\u0000) \t Tab 製表符(\u0009

Python基礎—15-表示式

正則表示式 應用場景 特定規律字串的查詢替換切割等 郵箱格式、URL、IP等的校驗 爬蟲專案中,特定內容的提取 使用原則 只要是能夠使用字串函式解決的問題,就不要使用正則 正則的效率較低,還會降低程式碼的可讀性 世界上最難理解的三樣東西:醫生的處方、道士的神符、碼農的正則 提醒:正則是用來寫的,不是用來

【PHP基礎表示式

<?php //功能:將文字中的連結地址轉成HTML //輸入:字串 //輸出:字串 function url2html($text) { //匹配一個URL,直到出現空白為止 preg_match_all("/http:\/\/?[^\s]+/i", $text, $links

java 手機號表示式 2018年3月(親測可用)

import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.lang3.StringUtils; /** * @author kpzc *三大運

利用Java裡的表示式求一群人身份證上的出生年月日

package Regex; import java.util.regex.*; import java.util.regex.Matcher; public class testIdCard { public static void main(String[] ar

python 基礎表示式

# 正則表示式 ### 應用場景 - 特定規律字串的查詢,切割、替換等 - 特定格式(郵箱、手機號、IP、URL等)的校驗 - 爬蟲專案中,提取特定內容 ### 使用原則 - 只要使用字串函式能夠解決的問題就不要使用正則 - 正則的效率比較低,同時會降低程式碼的可讀性 - 世界上最難理解的三樣東

Linq 基礎表示式

Linq 基礎 語法: 在c#中的var是一個型別的簡寫,是根據右邊進行型別的推導,只是編譯器自動幫我們編譯成右邊的型別 Object 和var 的區別 Object 是一個型別 var還可以是匿名型別 匿名型別 Var p=new {Age=5,Name=”tom”};/

java-grok通過表示式解析日誌

     專案中有一個新的需求,就是需要解析日誌,將日誌中的部分資料分析獲取出來供系統使用,通俗的講就是抓取日誌中的部分有用的資訊,比如下面的apache日誌資訊,我需要解析每行日誌,獲取每行日誌的IP地址、使用者、建立時間、請求方式、地址....如果我們單純使用java的