[英]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.