Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中使用正则表达式在给定单词后提取java中的单词_Java_Regex - Fatal编程技术网

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

如何在java中使用正则表达式在给定单词后提取java中的单词,java,regex,Java,Regex,我试图在给定单词后提取一个单词。 例如:如果我的字符串是“”,那么我想提取应用程序之后的单词(假设应用程序在字符串中只出现一次) 在这种情况下,我想提取1007。现在我已经用Java尝试过了 (.*)(.*)应用程序/[0-9]* 这给我的输出是http://localhost:8080/api/rest/loan/application/1007。但是我只想要1007作为我的输出。您可以使用正向查找来确保匹配的文本前面有应用程序/,使用此正则表达式 (?<=application/)[^

我试图在给定单词后提取一个单词。 例如:如果我的字符串是“”,那么我想提取
应用程序
之后的单词(假设应用程序在字符串中只出现一次)

在这种情况下,我想提取1007。现在我已经用Java尝试过了

(.*)(.*)应用程序/[0-9]*


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

您可以使用正向查找来确保匹配的文本前面有
应用程序/
,使用此正则表达式

(?<=application/)[^/]+
印刷品

1007
1007 
完成相同任务的另一种更简单、更高效的方法是使用以下分组模式:

/application/([^/]+)
并捕获group1的内容

请注意,这种方法速度快得多,而且适用范围广,因为某些方言有时不支持环顾四周

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());
}
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
1007 
怎么样

    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]);

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

在这种情况下不需要正则表达式。您可以组合使用
子字符串
索引of
。如果您提前知道元素相对于名称计数的索引,您也可以将URL视为
路径(绝对是黑客行为,而不是推荐的用法)。您的输入是否始终是URL?您的URL是否也可以类似
http://server.com/application/index.php?ord=asc&date=today#info
?如果word也是
应用程序
,那么预期的结果是什么?它比我的版本+1要好