簡體   English   中英

Java模式匹配正則表達式

[英]java pattern match regex

我有以下字符串:

String p = "{requestId=146bb94xxxxxR, value=false, tier=S3,ReceivedTime=0}";

我想提取請求ID值,所以希望我的輸出是

146bb94xxxxxR

這是我嘗試過的

Pattern MY_PATTERN = Pattern.compile("\\requestId=(.*?)\\,");
Matcher m = MY_PATTERN.matcher(p);
while (m.find()) {
    String s = m.group(1); // s now contains "BAR"
}

但是我沒有輸出,正則表達式有問題,但是我不確定如何糾正它。

您的正則表達式轉義了request中的r,這沒有任何意義。 嘗試

\\brequestId=([^,]*),

它將匹配單詞邊界- \\b ,然后是requestId= ,然后捕獲ID(直到,為止的所有內容)

Pattern.compile("requestId=(.*?),");

您應該刪除多余的字符轉義符( \\\\,\\\\r (表示回車符)),它將正常工作。

您也可以嘗試以下操作:

(?<=requestId=)(\\w*)

您不需要像前面在注釋中提到的示例那樣,用\\ (寫為字符串"\\\\" )來包圍正則表達式: 使用Java使用正則表達式查找較大字符串的子字符串 \\用來轉義那些[]的regex特殊字符。

因此,您的正則表達式Pattern.compile("\\\\requestId=(.*?)\\\\,") \\\\r部分將表示\\r ,即回車符 (行分隔符之一)。 因此,在r之前刪除該\\\\ 另外,您不必使用\\進行轉義,因為它不是正則表達式的特殊字符(至少在此情況下不是)。 因此,嘗試:

Pattern MY_PATTERN = Pattern.compile("requestId=(.*?),");
Matcher m = MY_PATTERN.matcher(" {requestId=146bb94xxxxxR, value=false, tier=S3,ReceivedTime=0}");
while (m.find()) {
    String s = m.group(1);
    System.out.println(s);
}
public static void main(String[] args) {
        String text = "{requestId=146bb94xxxxxR, value=false, tier=S3,ReceivedTime=0}";
        Pattern p = Pattern.compile("requestId=(.*?),");
        Matcher m = p.matcher(text);
        m.find();
        System.out.println(m.group(1));
}

輸出: 146bb94xxxxxR

暫無
暫無

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

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