日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

捕获分组和非捕获分组以及命名分组

發布時間:2025/3/8 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 捕获分组和非捕获分组以及命名分组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

下面由一個例子引出非捕獲組。

有兩個金額:8899¥。顯然,前一個是8899元的人民幣,后一個是6688元的美元。我現在需要一個正則,要求提煉出它們的貨幣金額和貨幣種類。正則可以這寫:(\\d)+([¥$])$? (在Java中測試,所以多了轉義字符'\'),最后一個$是字符串結束
測試程序如下:

package test;import java.util.regex.Matcher; import java.util.regex.Pattern;public class main {public static void main(String[] args){Pattern p = Pattern.compile("(\\d+)([¥$])$");// String str = "8899¥";Matcher m = p.matcher(str);if (m.matches()){System.out.println("貨幣金額: " + m.group(1));System.out.println("貨幣種類: " + m.group(2));}}}

輸出結果為:

貨幣金額: 8899
貨幣種類: ¥

OK,滿足了要求。這里的正則分成了兩個組,一個是(\\d+),一個是([¥$]),前一個組匹配貨幣金額,后一個組匹配貨幣種類。

現在,我需要這個正則可以匹配浮點數。如8899.56¥。我們都知道,現在少于一元錢基本上買不到東西了,所以我希望忽略小數部分,正則還是提煉出 8899 和 ¥。
那么正則如下:
(\\d+)(\\.?)(\\d+)([¥$])$
這里用括號分了四組,所以要輸出貨幣金額的整數部分和貨幣種類,要分別輸了group(1),group(4)了。如果輸出部分和正則是分開的,我希望只修改正則而不去修改輸出部分的代碼,也就是還是用group(1),group(2)作為輸出。由此可以引出非捕獲組(?:)。
把前面的正則修改為:
(\\d+)(?:\\.?)(?:\\d+)([¥$])$
這樣,還是用group(1),group(2)做為輸出,同樣輸出了 8899 和 ¥
這個正則的中間兩個組用到的就是非捕獲組(?:),它可以理解為只分組而不捕獲。

?

當然也可以用命名分組,這樣直觀一點.

package test;import java.util.regex.Matcher; import java.util.regex.Pattern;public class main {public static void main(String[] args){Pattern p = Pattern.compile("(?<money>\\d+)(?:\\.?)(?:\\d+)(?<type>[¥$])$");// String str = "8899.56¥";Matcher m = p.matcher(str);if (m.matches()){System.out.println("貨幣金額: " + m.group("money"));System.out.println("貨幣種類: " + m.group("type"));}}}

?

轉載于:https://www.cnblogs.com/ptqueen/p/7020828.html

總結

以上是生活随笔為你收集整理的捕获分组和非捕获分组以及命名分组的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。