簡體   English   中英

匹配所有出現的正則表達式Java

[英]Match all occurrences Regex Java

我想使用Regex Java API識別字符串的所有“單詞-數字-單詞”序列。

例如,如果我有“ ABC-122-JDHFHG-456-MKJD”,則需要輸出:[ABC-122-JDHFHG,JDHFHG-456-MKJD]。

String test = "ABC-122-JDHFHG-456-MKJD";

Matcher m = Pattern.compile("(([A-Z]+)-([0-9]+)-([A-Z]+))+")
            .matcher(test);
while (m.find()) {
    System.out.println(m.group());
}

上面的代碼僅返回“ ABC-122-JDHFHG”。

有任何想法嗎 ?

最后一個([AZ]+)匹配並使用JDHFHG ,因此正則表達式引擎僅在第一個匹配后“看到” -456-MKJD ,並且模式與此剩余字符串不匹配。

您想獲得“整個單詞”重疊匹配。

采用

String test = "ABC-122-JDHFHG-456-MKJD";

Matcher m = Pattern.compile("(?=\\b([A-Z]+-[0-9]+-[A-Z]+)\\b)")
            .matcher(test);
while (m.find()) {
    System.out.println(m.group(1));
} // => [ ABC-122-JDHFHG, JDHFHG-456-MKJD ]

參見Java演示

圖案細節

  • (?= -正向超前的開始位置,該位置與緊隨其后的位置相匹配
    • \\\\b單詞邊界
    • ( -捕獲組的開始(以便能夠獲取您需要的值)
    • [AZ]+ -1+ ASCII大寫字母
    • -連字符
    • [0-9]+ -1+個數字
    • -連字符
    • [AZ]+ -1+ ASCII大寫字母
  • ) -捕獲組的結尾
  • \\\\b單詞邊界
  • ) -超前構造的結尾。

在這里,您要重疊最后一個單詞。
從捕獲組1中制作一個陣列。

基本上,找到3個消耗2。這使下一個比賽位置開始
在下一個可能的已知單詞上。

(?=(([AZ]+-\\d+-)[AZ]+))\\2

https://regex101.com/r/Sl5FgT/1

格式化

 (?=                           # Assert to find 
      (                             # (1 start), word,num,word
           (                             # (2 start), word,num
                [A-Z]+ 
                -
                \d+ 
                -
           )                             # (2 end)
           [A-Z]+ 
      )                             # (1 end)
 )
 \2                            # Consume word,num

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM