最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中Pattern用法實例(正則表達式)

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

1. 正則表達式的應用

在給用戶發(fā)送消息時通常情況會有相同的消息模板,但其中部分信息跟用戶相關,因此需要對消息模板中的變量部分進行替換。而對于一個系統(tǒng)而言可能有很多套完全不同的模板。因此需要一個通用的根據(jù)實際信息替換消息模板中變量的方法。消息模板的變量與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中,然后再依次替換。上述方法的正則表達式中,([\\w]+)表示對匹配的內(nèi)容中進行捕獲,捕獲值存入matcher.group中,當然也可以有多個捕獲。

2. 常用正則表達式

[abc]     a、b 或 c(簡單類)

[^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](減去)

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

\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}   小寫字母字符:[a-z]

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

X?   X,一次或一次也沒有

X*   X,零次或多次

X+  X,一次或多次

X{n}      X,恰好 n 次

X{n,}     X,至少 n 次

X{n,m}  X,至少 n 次,但是不超過 m 次

(X) X,作為捕獲組

非捕獲

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

(?!X)      X,通過零寬度的負lookahead

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

(?<!X)   X,通過零寬度的負lookbehind

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

3 貪婪匹配與懶惰匹配

考慮這個表達式:a.*b,它將會匹配最長的以a開始,以b結束的字符串。如果用它來搜索aabab的話,它會匹配整個字符串a(chǎn)abab。這被稱為貪婪匹配。

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

a.*?b匹配最短的,以a開始,以b結束的字符串。如果把它應用于aabab的話,它會匹配aab和ab。

public static void main(String[] args) {
        String str = "北京市(海淀區(qū))(朝陽區(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ū))(朝陽區(qū))";
        String paternStr = ".*?(?=\\()";
        Pattern pattern = Pattern.compile(paternStr);
        Matcher matcher = pattern.matcher(str);
        if (matcher.find()) {
            System.out.println(matcher.group(0));
        }
}

上述方法輸出:北京市

補充:其它的一些用法

Pattern.split(CharSequence input)

這個方法跟String.split()方法效果類似

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

Pattern.matcher(String regex,CharSequence input)

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

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

總結

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

相關文章

  • 解讀Spring框架中常用的設計模式

    解讀Spring框架中常用的設計模式

    這篇文章主要介紹了解讀Spring框架中常用的設計模式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • java通過共享變量結束run停止線程的方法示例

    java通過共享變量結束run停止線程的方法示例

    這篇文章主要介紹了java通過共享變量結束run停止線程的方法,大家參考使用
    2013-11-11
  • Java序列化問題:“Serialized class has not implement Serializable interface”錯誤的解決方法

    Java序列化問題:“Serialized class has not impl

    在Java開發(fā)中,序列化(Serialization)是一個常見的操作,尤其是在分布式系統(tǒng)、網(wǎng)絡通信或數(shù)據(jù)持久化場景中,然而,序列化過程中可能會遇到各種問題,其中最常見的一個錯誤是Serialized class has not implement Serializable interface,本文給大家介紹了相關的解決方法
    2025-02-02
  • Spring使用注解進行對象裝配(DI)的操作

    Spring使用注解進行對象裝配(DI)的操作

    獲取Bean對象也叫做對象裝配,就是把對象取出來放到某個類中,有時候也叫對象注入,這篇文章主要介紹了Spring使用注解進行對象裝配(DI),需要的朋友可以參考下
    2023-07-07
  • IDEA如何自動生成serialVersionUID的設置

    IDEA如何自動生成serialVersionUID的設置

    這篇文章主要介紹了IDEA如何自動生成 serialVersionUID 的設置,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Java導出Excel通用工具類實例代碼

    Java導出Excel通用工具類實例代碼

    這篇文章主要給大家介紹了關于Java導出Excel通用工具類的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Java隊列同步器之CountDownLatch實現(xiàn)詳解

    Java隊列同步器之CountDownLatch實現(xiàn)詳解

    這篇文章主要介紹了Java隊列同步器之CountDownLatch實現(xiàn)詳解,CountDownLatch是一個同步工具類,它允許一個或多個線程一直等待,直到其他線程執(zhí)行完后再執(zhí)行,例如,應用程序的主線程希望在負責啟動框架服務的線程已經(jīng)啟動所有框架服務之后執(zhí)行,需要的朋友可以參考下
    2023-12-12
  • 如何將JSP/Servlet項目轉(zhuǎn)換為Spring Boot項目

    如何將JSP/Servlet項目轉(zhuǎn)換為Spring Boot項目

    這篇文章主要介紹了如何將JSP/Servlet項目轉(zhuǎn)換為Spring Boot項目,幫助大家更好的利用springboot進行網(wǎng)絡編程,感興趣的朋友可以了解下
    2020-10-10
  • 關于Linux服務器配置java環(huán)境遇到的問題小結

    關于Linux服務器配置java環(huán)境遇到的問題小結

    這篇文章主要介紹了關于Linux服務器配置java環(huán)境遇到的問題小結,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • spring boot 枚舉使用的坑整理

    spring boot 枚舉使用的坑整理

    在本篇文章里我們給大家整理了關于spring boot 枚舉使用的坑以及相關知識點內(nèi)容,需要的朋友們學習下。
    2019-08-08

最新評論

思南县| 印江| 濮阳市| 深水埗区| 格尔木市| 涞源县| 大新县| 荆州市| 且末县| 托克逊县| 乐都县| 和平县| 湖口县| 喀喇| 栾川县| 镇原县| 峡江县| 福泉市| 建瓯市| 红原县| 弥勒县| 靖州| 友谊县| 双城市| 静乐县| 林西县| 将乐县| 海林市| 女性| 云林县| 平乐县| 确山县| 太仓市| 正宁县| 孝感市| 交城县| 波密县| 辽中县| 临潭县| 永新县| 舟曲县|