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"
}
但是我没有得到任何输出,正则表达式有问题,但我不确定如何更正它。
您的正则表达式转义了请求中的 r
和毫无意义的 ,
。尝试
\brequestId=([^,]*),
这将匹配单词边界 - \b
,然后是 requestId=
,然后捕获 ID(直到 ,
)
Pattern.compile("requestId=(.*?),");
你应该删除多余的字符转义(\,
和\r
(这意味着carriage-return字符)),它会工作正常。
你也可以试试这个:
(?<=requestId=)(\w*)
你不需要用 \
(写成字符串 "\"
)包围你的正则表达式,就像你之前在评论中提到的例子:Using Java to find substring of a bigger string using Regular Expression。 \
用于转义少数正则表达式特殊字符,其中 ware [
和 ]
。
所以你的正则表达式 Pattern.compile("\requestId=(.*?)\,")
\r
部分将代表 \r
即 carriage return (行分隔符之一)。因此,删除 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
我有以下字符串:
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"
}
但是我没有得到任何输出,正则表达式有问题,但我不确定如何更正它。
您的正则表达式转义了请求中的 r
和毫无意义的 ,
。尝试
\brequestId=([^,]*),
这将匹配单词边界 - \b
,然后是 requestId=
,然后捕获 ID(直到 ,
)
Pattern.compile("requestId=(.*?),");
你应该删除多余的字符转义(\,
和\r
(这意味着carriage-return字符)),它会工作正常。
你也可以试试这个:
(?<=requestId=)(\w*)
你不需要用 \
(写成字符串 "\"
)包围你的正则表达式,就像你之前在评论中提到的例子:Using Java to find substring of a bigger string using Regular Expression。 \
用于转义少数正则表达式特殊字符,其中 ware [
和 ]
。
所以你的正则表达式 Pattern.compile("\requestId=(.*?)\,")
\r
部分将代表 \r
即 carriage return (行分隔符之一)。因此,删除 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