正規表示式複習

路過的大白發表於2020-10-21

正規表示式

概念

正規表示式是用來描述具有一定特徵的字串的特殊字

符串。Regular Expression。

ab*: a 若干個 b ->* 零個及以上 ,匹配: a ab 

abbbbb abbbbbbb 不能 bbbbb。 

(cd)*: ()->組,改變了優先順序 ,若干個 cd,匹配: “” cd 

cdcd cdcdcd 

ab*(cd)*:a 若干個 b 和若干個 cd 匹配: a ab 

abbbbb abbbbbbb acd acdcd abbbbbcd abcd 

ab*|(cd)*: |或的優先順序低 匹配: a ab cd 

ab|c : 匹配 ab c

作用

驗證、查詢、替換、分割

匹配規則

1. 特殊字元轉義

\d:0-9數字,使用時\要加一個\轉義 \d

\w: 26字母大小寫,0-9數字 \w

^ 開始標誌

$ 結束標誌

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-V5THaOnX-1603278853829)(C:\Users\lwf\AppData\Roaming\Typora\typora-user-images\image-20201021172825206.png)]

2.自定義

由 [] 組,只匹配一個, 需要注意以下四個:

^ : 如果在第一個位置,表示取反的含義。

​ -:表示一個區間即範圍

​ ] : 最近一個位置為:結束 ,如果要表示普通的]請加 \

​ \ : 轉義

[ae134] -> a e 1 3 4 

[(as)] ->a s ( ) 

[a-z] ->小寫字母 

[-\]a-z\[] -> -[] 及小寫字母

3.預設|標準字元類

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-7e9vdN5f-1603278853832)(C:\Users\lwf\AppData\Roaming\Typora\typora-user-images\image-20201021173546907.png)]

h[ea]llo –>hello hallo 

h(e|a)llo ->hello hallo 

[\-\\abc] -> - \ a b c 

\d\s ->一個數字和一個空白 

[\d\s] –> 數字 或 空白

3. 量詞

匹配的過程中,需要指定次數

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-ZzmzZYUp-1603278853834)(C:\Users\lwf\AppData\Roaming\Typora\typora-user-images\image-20201021185857923.png)]

co*ke –> 不限個數的 O 

co+ke –>至少一個 O 

co?ke ->1 個或零個 O 

co{0}ke ->0 個 

co{5,}ke –>5 次及以上 

co{5,8}ke –> 至少 5 次,最多 8 次 

[1-9]\d{3} –>大於等於 1000 小於等於 9999 的數 

[1-9]\d{2,4} –>大於等於 100 小於等於 99999 的數 

1[34578]\d{9} : 匹配手機號 

<[a-zA-Z]+\d?> ->網頁標籤 

<[A-Za-z][A-Za-z0-9]*> ->網頁標籤

4. 貪婪模式

在匹配次數不定時如 *, {n,}, + 匹配字元越多越好,

預設模式即”貪婪模 ”

  • 貪婪模式 greedy(匹配字元越多越好,可回溯)

  • ? 懶惰模式 lazy reluctant (匹配字元越少越好,可回

溯)

  • + 獨佔模式 possessive(匹配字元越多越好,不可回溯)

用的較少 cokecolacoooooooooooooke

.*o –>貪婪模式 
.{2,}o–>貪婪模式 
.{2,}?o –>懶惰模式 
.{2,}+o –>獨佔模式,不可回溯 沒有匹配到內容。 
<.+?> ->找出標籤 不要標籤內的內容。不是
<.+> <[^>]+>->找出標籤 不要標籤內的內容。不是<.+>

5.邊界

1)、邊界不佔用寬度,只是一個界限

2)、 ^ :開始 \b :單詞邊界 \B :非單詞邊界

$ :結束

^ :多行代表每行頭 單行代表整個字串的開始

$ : 多行代表每行尾 單行代表字串的結尾

\b : 匹配前面或後面的不是\w

\B : 匹配前面或後面的是\w

查詢開頭的 hello -> ^hello 找出 獨立的單詞 world -> \bworld\b 查詢結尾的 world -> world$

常用類

java.util.regex Pattern Matcher String

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-Tm2VQRJQ-1603278853837)(C:\Users\lwf\AppData\Roaming\Typora\typora-user-images\image-20201021190732463.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-ESmYp9td-1603278853840)(C:\Users\lwf\AppData\Roaming\Typora\typora-user-images\image-20201021190805375.png)]

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author lwf
 * @title: Demo1
 * @projectName 10_21Code
 * @description: TODO
 * @date 2020/10/2116:03
 */
public class Demo1 {
    public static void main(String[] args) {
        String str1="127.124.235.001";
        //簡單匹配檢查ip
        System.out.println(str1.matches("\\d{1,3}(.\\d{1,3}){3}"));
        //0-255  ([01]\\d{2})|2([0-4]\\d)|25[0-5]      (([01]\d{2})|2([0-4]\d)|25[0-5])(.(([01]\d{2})|2([0-4]\d)|25[0-5])){3}
        //只能匹配 0-255.0-255.0-255.0-255   且127.0.0.1必須寫成127.000.000.001不然無法識別
        System.out.println(str1.matches("(([01]\\d{2})|2([0-4]\\d)|25[0-5])(.(([01]\\d{2})|2([0-4]\\d)|25[0-5])){3}"));
        //Pattern ,Matcher 匹配字串
        //Pattern 呼叫compile()方法傳入正規表示式
        //獲取到的Pattern物件呼叫matcher()傳入要分析的字串
        //呼叫get()方法獲取是否匹配,參數列示從哪個索引開始查詢預設0
        String str2="江西上饒beautiful";
        Pattern p=Pattern.compile("上");
        Matcher matcher=p.matcher(str2);
        System.out.println(matcher.find(2));

    }
}

從哪個索引開始查詢預設0
String str2=“江西上饒beautiful”;
Pattern p=Pattern.compile(“上”);
Matcher matcher=p.matcher(str2);
System.out.println(matcher.find(2));

}

}


相關文章