如何在Java中使用正则表达式在给定单词之后提取Java中的单词

时间:2019-04-17 11:10:35

标签: java regex

我正在尝试在给定单词之后提取单词。 例如:如果我的字符串是“ http://localhost:8080/api/rest/loan/application/1007/applicant/951/pan”,那么我想提取application之后的单词(假设应用程序在字符串中仅出现一次)。

在这种情况下,我想提取1007。到目前为止,我已经使用Java尝试过此操作

(.*?^)(.*?)application/[0-9]*

这使我的输出为http://localhost:8080/api/rest/loan/application/1007。但是我只想输出1007。

2 个答案:

答案 0 :(得分:2)

您可以使用正则表达式来确保使用此正则表达式在匹配的文本之前加上application/

(?<=application/)[^/]+

在这里,[^/]+部分将捕获/以外的任何文本,从而为您提供所需的文本1007

Regex Demo

Java代码

String s = "http://localhost:8080/api/rest/loan/application/1007/applicant/951/pan";
Pattern p = Pattern.compile("(?<=application/)[^/]+");
Matcher m = p.matcher(s);
if (m.find()) {
    System.out.println(m.group());
}

打印

1007

执行相同任务的另一种更简便,更高效的方法是使用以下分组模式,

/application/([^/]+)

并捕获组1的内容。

Regex Demo with grouping pattern

请注意,由于某些方言有时不支持环顾四周,因此这样做的速度更快,并且可以广泛使用。

Java代码

String s = "http://localhost:8080/api/rest/loan/application/1007/applicant/951/pan";
Pattern p = Pattern.compile("/application/([^/]+)");
Matcher m = p.matcher(s);
if (m.find()) {
    System.out.println(m.group(1));
}

打印

1007 

答案 1 :(得分:0)

怎么样

    String a = "http://localhost:8080/api/rest/loan/application/1007/applicant/951/pan";
    a = a.replaceAll("(.*?^)(.*?)application/", "");
    String[] b = a.split("/");
    System.out.println(b[0]);

字符串replace函数将精确的字符串作为输入,而replaceAll函数将正则表达式作为输入参数。