使用包含括号'(''的正则表达式从字符串中提取子字符串

时间:2018-02-26 19:50:47

标签: android regex

我试图弄清楚如何从字符串中提取子字符串,但字符串包含一个括号,Java然后抱怨它没有被封闭,如果我试图逃避它,那么抱怨它不是一个有效的转义字符。

我有以下字符串:

[Monitor Status](/monitors#2972550?)] · [[Edit Monitor](/monitors#2972550/edit)] · [[Related Logs](/logs?query=)]
%%%

我正在尝试在/监听#之后提取数字。这个数字在两个地方,并且在两个地方总是相同,所以我只想提取第一个数字。

以下是我目前的情况:

Pattern pattern = Pattern.compile("[Monitor Status]/monitors#(\\d+)");                   
Matcher matcher = pattern.matcher(monitorDetails);
if (matcher.find())
{
     String monitor_id = matcher.group(1);
     monitorDetailsContainer.setVisibility(View.VISIBLE);
}

有了上述内容,我没有和{监视器之间的(,但是当我执行Android Studio时,我会说unclosed group。如果我试图逃避斜线\(它然后说非法逃脱字符。

我希望得到的是2972550

1 个答案:

答案 0 :(得分:3)

您在前往数字的路上错过了一些字符而无法逃脱()[,请使用

Pattern pattern = Pattern.compile("\\[Monitor Status]\\(/monitors#(\\d+)");                   
Matcher matcher = pattern.matcher(monitorDetails);
if (matcher.find())
{
     String monitor_id = matcher.group(1);
     monitorDetailsContainer.setVisibility(View.VISIBLE);
}

这是regex demoonline Java demo

<强>详情

  • \[ - [
  • Monitor Status - 文字子字符串
  • ] - 文字]
  • \( - 文字(
  • / - /
  • monitors# - 文字子字符串
  • (\d+) - 第1组:一个或多个数字。