国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java 正則表達(dá)式

這篇具有很好參考價(jià)值的文章主要介紹了Java 正則表達(dá)式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

正則表達(dá)式的元字符可以大致分為六類(lèi):

  1. 限定符
  2. 選擇匹配符
  3. 分組組合和反向引用符
  4. 特殊字符
  5. 字符匹配符
  6. 定位符

轉(zhuǎn)義符

\\ 符號(hào)在檢索某些特殊字符的時(shí)候可以使用,否則檢索不到結(jié)果。

在Java中是\\ ,而其他語(yǔ)言則是\ 。

一般 . * + ( ) $ / \ ? [ ] { } 都可能需要轉(zhuǎn)義符

public static void main(String[] args) {
    String content = "abc$((abfs)($(123";
    // 正則表達(dá)式:匹配左括號(hào),需要用到轉(zhuǎn)義符
    String regex = "\\(";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(content);
    while (matcher.find()) {
        System.out.println("截取到的字符串:" + matcher.group(0));
    }
}

字符匹配符

符號(hào) 描述 示例 解釋
[] 可接收的字符列表 [efgh] 匹配e、f、g、h中的任意1個(gè)字符
[^] 不接收的字符列表 [^abc] 除了a、b、c以外的任意1個(gè)字符,包括數(shù)字和特殊符號(hào)
- 連續(xù)字符 A-Z 任意一個(gè)大寫(xiě)字母
. 匹配除\n 以外的任何字符 a..b 以a開(kāi)頭,b結(jié)尾,中間有兩個(gè)任意字符,長(zhǎng)度為4的字符串(aaab,asdb,a*+b)
\\d 匹配單個(gè)數(shù)字字符,相當(dāng)于[0-9] \\d{3(\\d)? 包含3個(gè)或4個(gè)數(shù)字的字符串(123,4528)
\\D 匹配單個(gè)非數(shù)字字符,相當(dāng)于[^0-9] \\D(\\d*) 非數(shù)字開(kāi)頭,之后任意個(gè)數(shù)字字符串(a,A528)
\\w 匹配單個(gè)數(shù)字、大小寫(xiě)字母、下劃線的字符,相當(dāng)于[0-9a-zA-Z] \\d{3}\\w{4} 3個(gè)數(shù)字開(kāi)頭長(zhǎng)度為7的數(shù)字字母字符串(235ads5,123412a)
\\W 匹配單個(gè)非數(shù)字、大小寫(xiě)字母、下劃線的字符,相當(dāng)于[^0-9a-zA-Z] \\W+\\d{2} 一個(gè)非數(shù)字字母開(kāi)頭,2個(gè)數(shù)字結(jié)尾的字符串(#35,$%dassd25)
\\s 匹配任何空白字符(空格、制表符等)
\\S 匹配任何非空白字符

大小寫(xiě)

Java正則表達(dá)式默認(rèn)是區(qū)分字母大小寫(xiě)的,(?i) 表示編譯標(biāo)記。

下面幾個(gè)示例實(shí)現(xiàn)不區(qū)分大小寫(xiě):

  • (?i)abc:表示abc都不區(qū)分大小寫(xiě)
  • a(?i)bc:表示bc不區(qū)分大小寫(xiě)
  • a((?i)b)c:表示b不區(qū)分大小寫(xiě)
  • Pattern.CASE_INSENSITIVE :不區(qū)分大小寫(xiě)
public static void main(String[] args) {
    String content = "a11c8abcABC _";
    // 匹配任意一個(gè)小寫(xiě)字母
    String regex1 = "[a-z]";
    // 匹配任意一個(gè)大寫(xiě)字母
    String regex2 = "[A-Z]";
    // 匹配小寫(xiě)abc,必須是abc連起來(lái)才能匹配上
    String regex3 = "abc";
    // 匹配不區(qū)分大小寫(xiě)abc
    Pattern pattern1 = Pattern.compile(regex3, Pattern.CASE_INSENSITIVE);
    // 匹配不區(qū)分大小寫(xiě)abc
    String regex4 = "(?i)abc";
    // 匹配數(shù)字
    String regex5 = "[0-9]";
    String regex6 = "\\d";
    // 匹配除小寫(xiě)字母其他所有字符
    String regex7 = "[^a-z]";
    // 匹配abcd中任意一個(gè)字符
    String regex8 = "[abcd]";
    // 匹配數(shù)字、字母、下劃線中任意一個(gè)字符
    String regex9 = "\\w";
    // 匹配空格、制表符
    String regex10 = "\\s";
    // 匹配除\n以外的所有字符,匹配.本身的話使用\\.
    String regex = ".";

    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(content);
    while (matcher.find()) {
        System.out.println("截取到的字符串:" + matcher.group(0));
    }
}

選擇匹配符

符號(hào) 描述
| 匹配 | 前或后的表達(dá)式
public static void main(String[] args) {
    String content = "a11c8abcABC _";
    // 匹配abc或者ABC再或者aaa
    String regex = "abc|ABC|aaa";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(content);
    while (matcher.find()) {
        System.out.println("截取到的字符串:" + matcher.group(0));
    }
}

限定符

用于指定其前面的字符和組合項(xiàng)連續(xù)出現(xiàn)多少次。

符號(hào) 描述 示例 解釋
* 指定字符重復(fù)0次或n次 (abc)* 僅包含任意個(gè)abc的字符串,等效于\w* (abc,abcabcabc)
+ 指定字符重復(fù)1次或n次(最少一次) m+(abc)* m開(kāi)頭,后面接任意個(gè)abc的字符串(m,mabc,mabcabcabc)
? 指定字符重復(fù)0次或1次(最多一次) m+abc? m開(kāi)頭,后面接ab或abc的字符串(mab,mabc,mmmabc)
{n} 只能輸入n個(gè)字符 [abcd]{3} 由abcd中字母組成長(zhǎng)度為3的字符串(abc,bcd,adc)
{n,} 指定至少n個(gè)匹配 [abcd]{3,} 由abcd中字母組成的任意長(zhǎng)度不小于3的字符串(aab,bdc,aaadbc)
{n,m} 指定至少n個(gè)但不多余m個(gè)匹配 [abcd]{3,5} 由abcd中字母組成的任意長(zhǎng)度不小于3的字符串,并且長(zhǎng)度不大于5的字符串(abc,abcd,aaaaa,bcdab)
public static void main(String[] args) {
    String content = "1111111aaaaaahello";
    // 匹配aaa
    String regex1 = "a{3}";
    // 匹配1111,只會(huì)匹配(0,3),后面3個(gè)1不會(huì)被匹配到
    String regex2 = "1{4}";
    // 匹配兩位連續(xù)的數(shù)字,這里會(huì)匹配到3個(gè)11
    String regex3 = "\\d{2}";
    // 匹配aaa或者aaaa,Java中默認(rèn)會(huì)先匹配多的,因?yàn)橹挥?個(gè)a,所以是aaaa
    String regex4 = "a{3,4}";
    // 匹配連續(xù)2-5個(gè)數(shù)字的組合
    String regex5 = "\\d{2,5}";
    // 匹配一個(gè)1或者多個(gè)1,貪婪匹配,所以直接7個(gè)1
    String regex6 = "1+";
    // 匹配0個(gè)1或者多個(gè)1,貪婪匹配,所以直接7個(gè)1和一些沒(méi)有1
    String regex7 = "1*";
    // 匹配1后面有個(gè)a,也可以沒(méi)有
    String regex = "1a?";
    
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(content);
    while (matcher.find()) {
        System.out.println("截取到的字符串:" + matcher.group(0));
    }
}

定位符

定位符規(guī)定要匹配的字符串出現(xiàn)的位置,比如在字符串開(kāi)始的位置或者結(jié)束的位置。

符號(hào) 描述 示例 解釋
^ 指定起始字符 ^[0-9]+[a-z]\* 至少一個(gè)數(shù)字開(kāi)頭,后面接任意個(gè)小寫(xiě)字母(123,6aa,555edf)
$ 指定結(jié)束字符 ^[0-9]\\-[a-z]+$ 1個(gè)數(shù)字開(kāi)頭,接"-",接至少一個(gè)小寫(xiě)字母(1-a)
\\b 匹配目標(biāo)字符串的邊界 hu\\b 邊界指空格或者結(jié)束位置(huwenlong wlhu hahahu)
\\B 匹配目標(biāo)字符串的非邊界 hu\\B 和\\b相反(huwenlong wlhu hahahu)
public static void main(String[] args) {
    String content = "123abc";
    // 匹配至少一個(gè)數(shù)字開(kāi)頭,后面接任意小寫(xiě)字母,匹配的是整串
    String regex1 = "^[0-9]+[a-z]*";
    // 匹配至少一個(gè)數(shù)字開(kāi)頭,必須一個(gè)小寫(xiě)字母結(jié)尾,匹配的是整串
    String regex = "^[0-9]+[a-z]+$";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(content);
    while (matcher.find()) {
        System.out.println("截取到的字符串:" + matcher.group(0));
    }
}
public static void main(String[] args) {
    String content = "huwenlong wlhu huhahahu";
    // 匹配在邊界的hu,空格前的+字符串末尾的
    String regex1 = "hu\\b";
    // 匹配不在邊界的hu,空格后的+字符串開(kāi)頭的
    String regex = "hu\\B";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(content);
    while (matcher.find()) {
        System.out.println("截取到的字符串:" + matcher.group(0));
    }
}

分組

捕獲分組

常用分組構(gòu)造形式 描述
(pattern) 非命名捕獲,捕獲匹配的子字符串,編號(hào)為0的第一個(gè)捕獲是由整個(gè)正則表達(dá)式模式匹配的文本,其它捕獲的結(jié)果則根據(jù)左括號(hào)的順序從1開(kāi)始自動(dòng)編號(hào)。
(?<name>pattern) 命名捕獲,將匹配的子字符串捕獲到一個(gè)組名稱(chēng)或2編號(hào)名稱(chēng)中,用于name的字符串不能包含任何符號(hào),并且不能以數(shù)字開(kāi)頭??梢允褂?code>''代替<>,例如(?'name')
public static void main(String[] args) {
    String content = "huwenlong wl7787 huhaha1541hu";
    // 匹配四個(gè)數(shù)字
    String regex1 = "\\d\\d\\d\\d";
    // 非命名分組:
    // 匹配四個(gè)數(shù)字,其中每?jī)蓚€(gè)數(shù)字為一組
    // matcher.group(0):匹配到的所有字符串
    // matcher.group(1):匹配到的第一組的內(nèi)容,也就是前兩個(gè)數(shù)字
    // matcher.group(2):匹配到的第二組的內(nèi)容,也就是后兩個(gè)數(shù)字
    String regex2 = "(\\d\\d)(\\d\\d)";
    String regex = "(?<g1>\\d\\d)(?<g2>\\d\\d)";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(content);
    while (matcher.find()) {
        System.out.println("截取到的字符串:" + matcher.group(0));
        System.out.println("第一組:" + matcher.group(1));
        System.out.println("第二組:" + matcher.group(2));
        System.out.println("命名分組-第一組:" + matcher.group("g1"));
        System.out.println("命名分組-第二組:" + matcher.group("g2"));
        
    }
}

非捕獲分組

常用分組構(gòu)造形式 描述
(?:pattern) 非捕獲匹配,匹配pattern但不捕獲該匹配的子表達(dá)式,不存儲(chǔ)供以后使用的匹配。這對(duì)于用"or"字符(`
(?=pattern) 非捕獲匹配,例如:`'Windows (?=95
(?!pattern) 非捕獲匹配,該表達(dá)式匹配不處于匹配pattern的字符串的起始點(diǎn)的搜索字符串。例如:`'Windows (?!95
public static void main(String[] args) {
    String content = "hellohuwen arborhuwl huwonghello";
    // 正常匹配
    String regex1 = "huwen|huwl|huwong";
    // 非捕獲分組,上面的等價(jià)于:
    String regex2 = "huw(?:en|l|ong)";
    // 非捕獲分組,huw后面包含了以下兩種情況才會(huì)被匹配,
    // 但是不包含下面兩種字符,所以得到的結(jié)果是兩個(gè)huw
    String regex3 = "huw(?=en|l)";
    // 非捕獲分組,huw后面不包含以下兩種情況才會(huì)被匹配,
    // 但是不包含下面兩種字符,所以得到的結(jié)果是一個(gè)huw
    String regex = "huw(?!en|l)";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(content);
    while (matcher.find()) {
        System.out.println("截取到的字符串:" + matcher.group(0));
    }
}

非貪婪匹配

一般情況下,正則表達(dá)式會(huì)貪婪匹配,可以看限定符章節(jié),而在后面加個(gè)? 就是非貪婪匹配。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-832807.html

public static void main(String[] args) {
    String content = "1111111aaaaaahello";
    // 匹配數(shù)字,貪婪匹配會(huì)匹配到1111111
    String regex1 = "\\d+";
    // 匹配數(shù)字,非貪婪匹配會(huì)匹配到七個(gè)1
    String regex = "\\d+?";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(content);
    while (matcher.find()) {
        System.out.println("截取到的字符串:" + matcher.group(0));
    }
}

反向引用

  • 分組: 用圓括號(hào)()組成一個(gè)比較復(fù)雜的匹配模式,一個(gè)圓括號(hào)就是一個(gè)子表達(dá)式(一個(gè)分組)。
  • 捕獲: 把正則表達(dá)式中子表達(dá)式(分組)匹配的內(nèi)容,保存到內(nèi)存中,以數(shù)字編號(hào)或顯式命名的組里,方便后面引用。從左向右,以分組的左括號(hào)為標(biāo)志,第一個(gè)出現(xiàn)的分組的組號(hào)為1,第二個(gè)為2,以此類(lèi)推,組0表示整個(gè)正則式。
  • 反向引用: 小括號(hào)的內(nèi)容被捕獲后,可以在這個(gè)括號(hào)后被使用,從而寫(xiě)出一個(gè)比較實(shí)用的匹配模式。這種引用既可以在正則表達(dá)式的內(nèi)部,也可以在外部,內(nèi)部反向引用**\\分組號(hào)**,外部反向引用**$分組號(hào)**。
匹配兩個(gè)連續(xù)相同的數(shù)字:(\\d)\\1    // 先匹配一個(gè)數(shù)字,再反向引用一次,1表示分組1號(hào)也就是第一個(gè)括號(hào)
匹配五個(gè)連續(xù)相同的數(shù)字:(\\d)\\1{4}    // 先匹配一個(gè)數(shù)字,再反向引用四次
匹配四個(gè)數(shù)字,中間兩個(gè)數(shù)相同,兩邊兩個(gè)數(shù)相同,例如:1221,3553,2332
(\\d)(\\d)\\2\\1    // \\2表示第二組反向引用一次,\\1表示第一組反向引用一次

示例

public static void main(String[] args) {
    String content = "https://space.bilibili.com/124536558?spm_id_from=333.1007.0.0";
    // 匹配多個(gè)漢字,整體匹配
    String regex1 = "^[\u0391-\uffe5]+$";
    // 匹配郵政編碼,1-9開(kāi)頭的六位數(shù)字
    String regex2 = "^[1-9]\\d{5}$";
    // 匹配QQ,1-9開(kāi)頭的5-10位數(shù)字
    String regex3 = "^[1-9]\\d{4,9}$";
    // 匹配手機(jī)號(hào)碼,必須是13 14 15 18開(kāi)頭的11位數(shù)字
    String regex4 = "^1[3|4|5|8]\\d{9}$";
    // 匹配url []中的 ? * . 表示的是本身,不是轉(zhuǎn)義符,所以不用使用\\轉(zhuǎn)義
    String regex = "^((http|https)://)([\\w-]+\\.)+[\\w-]+(/[\\w-?=&/%.#]*)?$";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(content);
    if (matcher.find()) {
        System.out.println("滿足格式");
    } else {
        System.out.println("不滿足格式");
    }
}

到了這里,關(guān)于Java 正則表達(dá)式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 正則表達(dá)式(Java)

    正則表達(dá)式(Java)

    正則表達(dá)式是由一些特定的字符組成,代表一個(gè)規(guī)則,可以用來(lái)檢驗(yàn)數(shù)據(jù)格式是否合法,也可以在一段文本中查找滿足要求的內(nèi)容。 如果使用代碼檢驗(yàn)數(shù)據(jù)是否正確: 使用正則表達(dá)式: String提供了一個(gè)匹配正則表達(dá)式的方法:? 圖片來(lái)源heimait \\\\d才會(huì)當(dāng)成d使用 (?i)表示忽略大

    2024年02月20日
    瀏覽(24)
  • JAVA中正則表達(dá)式

    JAVA中正則表達(dá)式

    接下來(lái),學(xué)習(xí)一個(gè)全新的知識(shí),叫做正則表達(dá)式。 正則表達(dá)式其實(shí)是由一些特殊的符號(hào)組成的,它代表的是某種規(guī)則。 正則表達(dá)式的作用1:用來(lái)校驗(yàn)字符串?dāng)?shù)據(jù)是否合法 正則表達(dá)式的作用2:可以從一段文本中查找滿足要求的內(nèi)容 5.1 正則表達(dá)式初體驗(yàn) 現(xiàn)在,我們就以QQ號(hào)碼

    2024年01月20日
    瀏覽(23)
  • Java 正則表達(dá)式匹配

    正則表達(dá)式: 定義一個(gè)搜索模式的字符串。 正則表達(dá)式可以用于搜索、編輯和操作文本。 正則對(duì)文本的分析或修改過(guò)程為:首先正則表達(dá)式應(yīng)用的是文本字符串(text/string),它會(huì)以定義的模式從左到右匹配文本,每個(gè)源字符只匹配一次。 正則表達(dá)式 匹配 this is text 精確匹配

    2024年02月06日
    瀏覽(29)
  • Java的正則表達(dá)式

    正則表達(dá)式是一種強(qiáng)大的字符串匹配工具,可以在很多領(lǐng)域得到廣泛使用。在Java中,正則表達(dá)式也被廣泛應(yīng)用于字符串匹配、查找和替換等方面。本文將介紹Java中常用的正則表達(dá)式語(yǔ)法以及其使用方法,供大家參考。 Java中使用正則表達(dá)式需要使用java.util.regex包中的類(lèi)。其中

    2024年02月07日
    瀏覽(24)
  • Java038——正則表達(dá)式

    正則表達(dá)式通常被用于判斷語(yǔ)句中,用來(lái)檢查某一字符串是否滿足某一格式。正則表達(dá)式是含有一些具有特殊意義字符的字符串,這些特殊字符稱(chēng)為正則表達(dá)式的元字符。例如,“d”表示數(shù)字 0~9 中的任何一個(gè),“d”就是元字符。正則表達(dá)式中的元字符及其意義下所示。 在

    2024年02月13日
    瀏覽(27)
  • JAVA系列---正則表達(dá)式

    編號(hào) 元字符 匹配功能 1 . 匹配除換?符以外的任意字符 2 w 匹配字?或數(shù)字或下劃線 3 s 匹配任意的空?符 4 d 匹配數(shù)字 5 n 匹配?個(gè)換?符 6 t 匹配?個(gè)制表符 7 ^ 匹配字符串的開(kāi)始 8 $ 匹配字符串的結(jié)尾 9 W 匹配?字?或數(shù)字或下劃線 10 D 匹配?數(shù)字 11 S 匹配?空?符

    2024年02月15日
    瀏覽(38)
  • 【Java 基礎(chǔ)篇】Java 正則表達(dá)式

    正則表達(dá)式是一種強(qiáng)大的文本模式匹配工具,它可以幫助我們?cè)谖谋局胁檎摇⑻鎿Q和提取特定模式的內(nèi)容。Java 提供了豐富的正則表達(dá)式支持,通過(guò) java.util.regex 包中的類(lèi)和方法,我們可以在 Java 程序中使用正則表達(dá)式進(jìn)行字符串處理。 本篇博客將介紹 Java 正則表達(dá)式的基本

    2024年02月09日
    瀏覽(32)
  • Java 正則表達(dá)式【基本語(yǔ)法】

    首先我們需要了解的是正則表達(dá)式中的各種元字符的功能,主要分為以下幾種: 限定符 選擇匹配符 分組組合和反向引用符 特殊字符 字符匹配符 定位符 需要注意的是:在 Java正則表達(dá)式中,兩個(gè)斜杠 \\\\ 相當(dāng)于其它語(yǔ)言中的一個(gè)斜杠 。 符號(hào) 含義 示例 解釋 [ ] 可以匹配的字

    2024年02月13日
    瀏覽(15)
  • Java 正則表達(dá)式數(shù)字篇

    如果需要根據(jù)特定的規(guī)則來(lái)表示一組字符串,則用正則表達(dá)式。正則表達(dá)式可以用字符串來(lái)描述規(guī)則,并用來(lái)匹配字符串 Java 提供了標(biāo)準(zhǔn)庫(kù) java.util.regex ,可以很方便的使用正則表達(dá)式。 如果正則表達(dá)式有特殊字符,那就需要用 轉(zhuǎn)義,后續(xù)會(huì)提到。 用 d 可以匹配一位數(shù)字

    2024年02月05日
    瀏覽(20)
  • JAVA Android 正則表達(dá)式

    JAVA Android 正則表達(dá)式

    正則表達(dá)式是對(duì)字符串執(zhí)行模式匹配的技術(shù)。 如果要想靈活的運(yùn)用正則表達(dá)式,必須了解其中各種元字符的功能,元字符從功能上大致分為: 1、限定符 2、選擇匹配符 3、分組組合和反向引用符 4、特殊字符 5、字符匹配符 6、定位符 元字符(Metacharacter)-轉(zhuǎn)義號(hào) \\\\ 符號(hào)說(shuō)明: 在我

    2024年02月13日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包