繁体   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