欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中Pattern用法實(shí)例(正則表達(dá)式)

 更新時(shí)間:2022年07月07日 09:17:58   作者:woniu317  
Pattern在java.util.regex包中,是正則表達(dá)式的編譯表示形式,此類(lèi)的實(shí)例是不可變的,可供多個(gè)并發(fā)線程安全使用,下面這篇文章主要給大家介紹了關(guān)于Java正則表達(dá)式Pattern用法的相關(guān)資料,需要的朋友可以參考下

1. 正則表達(dá)式的應(yīng)用

在給用戶(hù)發(fā)送消息時(shí)通常情況會(huì)有相同的消息模板,但其中部分信息跟用戶(hù)相關(guān),因此需要對(duì)消息模板中的變量部分進(jìn)行替換。而對(duì)于一個(gè)系統(tǒng)而言可能有很多套完全不同的模板。因此需要一個(gè)通用的根據(jù)實(shí)際信息替換消息模板中變量的方法。消息模板的變量與velcity中的變量規(guī)范相同。

publicstatic <K, V> String replacePlaceHolderWithMapValue(String msg,Map<K,V> placeHolderMap) {
              Patternpattern = Pattern.compile("\\$*!?\\{([\\w]+)\\}");
              Matchermatcher = pattern.matcher(msg);
              Map<String,String> replaceList = new HashMap();
              while(matcher.find()) {
                     StringplaceHolder = matcher.group(0);
                     Stringkey = matcher.group(1);
                     Objectvalue = placeHolderMap.get(key);
                     if(value != null) {
                            replaceList.put(placeHolder,value.toString());
                     }
              }
              for(Entry<String, String> keyValue:replaceList.entrySet()) {
                     msg= msg.replace(keyValue.getKey(), keyValue.getValue());
              }
              returnmsg;
       }

方法中先獲取所有的需要替換的變量存入replaceList中,然后再依次替換。上述方法的正則表達(dá)式中,([\\w]+)表示對(duì)匹配的內(nèi)容中進(jìn)行捕獲,捕獲值存入matcher.group中,當(dāng)然也可以有多個(gè)捕獲。

2. 常用正則表達(dá)式

[abc]     a、b 或 c(簡(jiǎn)單類(lèi))

[^abc]   任何字符,除了 a、b 或 c(否定)

[a-zA-Z] a到 z 或 A 到 Z,兩頭的字母包括在內(nèi)(范圍)

[a-d[m-p]]   a到 d 或 m 到 p:[a-dm-p](并集)

[a-z&&[def]]       d、e 或 f(交集)

[a-z&&[^bc]]      a 到 z,除了 b 和 c:[ad-z](減去)

[a-z&&[^m-p]]   a 到 z,而非 m 到 p:[a-lq-z](減去)

.      任何字符(與行結(jié)束符可能匹配也可能不匹配)

\d   數(shù)字:[0-9]

\D  非數(shù)字: [^0-9]

\s   空白字符:[\t\n\x0B\f\r]

\S   非空白字符:[^\s]

\w  單詞字符:[a-zA-Z_0-9]

\W 非單詞字符:[^\w]

\p{Lower}   小寫(xiě)字母字符:[a-z]

\p{Upper}  大寫(xiě)字母字符:[A-Z]

X?   X,一次或一次也沒(méi)有

X*   X,零次或多次

X+  X,一次或多次

X{n}      X,恰好 n 次

X{n,}     X,至少 n 次

X{n,m}  X,至少 n 次,但是不超過(guò) m 次

(X) X,作為捕獲組

非捕獲

(?=X)    X,通過(guò)零寬度的正lookahead

(?!X)      X,通過(guò)零寬度的負(fù)lookahead

(?<=X)  X,通過(guò)零寬度的正lookbehind

(?<!X)   X,通過(guò)零寬度的負(fù)lookbehind

(?>X)    X,作為獨(dú)立的非捕獲組

3 貪婪匹配與懶惰匹配

考慮這個(gè)表達(dá)式:a.*b,它將會(huì)匹配最長(zhǎng)的以a開(kāi)始,以b結(jié)束的字符串。如果用它來(lái)搜索aabab的話,它會(huì)匹配整個(gè)字符串a(chǎn)abab。這被稱(chēng)為貪婪匹配。

有時(shí),我們更需要懶惰匹配,也就是匹配盡可能少的字符。前面給出的限定符都可以被轉(zhuǎn)化為懶惰匹配模式,只要在它后面加上一個(gè)問(wèn)號(hào)?。這樣.*?就意味著匹配任意數(shù)量的重復(fù),但是在能使整個(gè)匹配成功的前提下使用最少的重復(fù)。

a.*?b匹配最短的,以a開(kāi)始,以b結(jié)束的字符串。如果把它應(yīng)用于aabab的話,它會(huì)匹配aab和ab。

public static void main(String[] args) {
        String str = "北京市(海淀區(qū))(朝陽(yáng)區(qū))";
        String paternStr = ".*(?=\\()";
        Pattern pattern = Pattern.compile(paternStr);
        Matcher matcher = pattern.matcher(str);
        if (matcher.find()) {
            System.out.println(matcher.group(0));
        }
}

上述方法的輸出為:北京市(海淀區(qū))

public static void main(String[] args) {
        String str = "北京市(海淀區(qū))(朝陽(yáng)區(qū))";
        String paternStr = ".*?(?=\\()";
        Pattern pattern = Pattern.compile(paternStr);
        Matcher matcher = pattern.matcher(str);
        if (matcher.find()) {
            System.out.println(matcher.group(0));
        }
}

上述方法輸出:北京市

補(bǔ)充:其它的一些用法

Pattern.split(CharSequence input)

這個(gè)方法跟String.split()方法效果類(lèi)似

Pattern p2 = Pattern.compile("[a-z]+");
// str的長(zhǎng)度為2,返回"我愛(ài)"和"哈哈",跟 String[] arr = "我愛(ài)java哈哈".
String[] arr = p2.split("我愛(ài)java哈哈");
Arrays.stream(arr).forEach(System.out::println);

Pattern.matcher(String regex,CharSequence input)

一個(gè)靜態(tài)方法,用于快速匹配字符串,該方法適合用于只匹配一次,且匹配全部字符串,效果與Pattern.compile(regex).matcher(input).matches() 類(lèi)似

Pattern p = Pattern.compile("\\d+");
// 返回\d+
System.out.println(p.pattern());
// p.pattern()返回\d+, 這里為true,只有當(dāng)全部滿(mǎn)足則為true
System.out.println(Pattern.matches(p.pattern(), "2223"));
// 返回false,只要一個(gè)不滿(mǎn)足,則返回false
System.out.println(Pattern.matches(p.pattern(), "2223b"));

總結(jié)

到此這篇關(guān)于Java中Pattern用法實(shí)例的文章就介紹到這了,更多相關(guān)正則表達(dá)式Pattern用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實(shí)現(xiàn)將html字符串插入到PPT幻燈片

    Java實(shí)現(xiàn)將html字符串插入到PPT幻燈片

    Java后端代碼操作PPT幻燈片時(shí),可直接在幻燈片中繪制形狀,并在形狀中添加文本字符串內(nèi)容。本篇文章主要介紹通過(guò)java實(shí)現(xiàn)將html字符串添加到PPT幻燈片的的方法,可添加文字、圖片、視頻、音頻等。以下是具體方法和步驟。
    2021-11-11
  • Spring?@bean和@component注解區(qū)別

    Spring?@bean和@component注解區(qū)別

    本文主要介紹了Spring?@bean和@component注解區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java使用反射獲取字段屬性

    Java使用反射獲取字段屬性

    這篇文章主要為大家詳細(xì)介紹了Java如何利用反射實(shí)現(xiàn)獲取字段屬性值,文中的示例代碼講解詳細(xì),具有很好的參考價(jià)值,希望對(duì)大家有所幫助
    2023-06-06
  • java學(xué)習(xí)之理解自動(dòng)拆裝箱特性

    java學(xué)習(xí)之理解自動(dòng)拆裝箱特性

    這篇文章主要介紹java自動(dòng)拆裝箱特性以及java自動(dòng)拆裝箱的應(yīng)用,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家早日升職加薪
    2021-09-09
  • Activiti流程圖查看實(shí)例

    Activiti流程圖查看實(shí)例

    這篇文章主要介紹了Activiti流程圖查看實(shí)例,需要的朋友可以參考下
    2014-08-08
  • Java 數(shù)據(jù)類(lèi)型及類(lèi)型轉(zhuǎn)換的互相轉(zhuǎn)換實(shí)例代碼

    Java 數(shù)據(jù)類(lèi)型及類(lèi)型轉(zhuǎn)換的互相轉(zhuǎn)換實(shí)例代碼

    這篇文章主要介紹了Java 數(shù)據(jù)類(lèi)型及類(lèi)型轉(zhuǎn)換的互相轉(zhuǎn)換實(shí)例代碼,需要的朋友可以參考下
    2020-10-10
  • 詳解HTTP請(qǐng)求與響應(yīng)基礎(chǔ)及實(shí)例

    詳解HTTP請(qǐng)求與響應(yīng)基礎(chǔ)及實(shí)例

    這篇文章主要介紹了詳解HTTP請(qǐng)求與響應(yīng)基礎(chǔ)及實(shí)例的相關(guān)資料,這里對(duì)http的請(qǐng)求和響應(yīng)進(jìn)行詳細(xì)分析并附有實(shí)現(xiàn)實(shí)例,需要的朋友可以參考下
    2017-07-07
  • SpringBoot實(shí)現(xiàn)mysql與clickhouse多數(shù)據(jù)源的項(xiàng)目實(shí)踐

    SpringBoot實(shí)現(xiàn)mysql與clickhouse多數(shù)據(jù)源的項(xiàng)目實(shí)踐

    本文主要介紹了SpringBoot實(shí)現(xiàn)mysql與clickhouse多數(shù)據(jù)源的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • Java打印流原理及實(shí)例詳解

    Java打印流原理及實(shí)例詳解

    這篇文章主要介紹了Java打印流原理及實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Java使用Catcher捕獲異常的實(shí)現(xiàn)

    Java使用Catcher捕獲異常的實(shí)現(xiàn)

    本文主要介紹了Java使用Catcher捕獲異常的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05

最新評(píng)論