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