我试图弄清楚如何从字符串中提取子字符串,但字符串包含一个括号,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
。
答案 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 demo和online Java demo。
<强>详情
\[
- [
Monitor Status
- 文字子字符串]
- 文字]
\(
- 文字(
/
- /
monitors#
- 文字子字符串(\d+)
- 第1组:一个或多个数字。