我必须在/
和?
之间提取一个字符串,即exampleproduct
https://local.host.com/order/faces/Home/myorder/exampleproduct?_adf.ctrl-state=mfun9p14r_19
如何为此编写正则表达式 我正在使用这种逻辑,但我无法
private static String extractPageNameFromURL(String urlFull) {
if (urlFull != null) {
Pattern pattern = Pattern.compile("/(.*?).jspx?");
Matcher matcher = pattern.matcher(urlFull);
while (matcher.find()) {
String str1 = matcher.group(1);
String[] dataRows = str1.split("/");
urlFull = dataRows[dataRows.length - 1];
}
}
return urlFull;
}
public static void main(String[] args) {
System.out.println(DtmUtils.extractPageNameFromURL("https://local.host.com/order/faces/Home/myorder/exampleproduct?_adf.ctrl-state=mfun9p14r_19"));
}
由于 拉吉
答案 0 :(得分:1)
如果我关注您的问题,那么您就是在尝试从网址中提取exampleproduct
。
这是用于实现此目的的正则表达式。第1组应该在最后一个/
之后和该斜杠之后的第一个?
之前具有名称。
^.*\/([^?]+)\?.*$
查看regex
的示例^ -- Beginning of line anchor
.* -- find 0 or more characters. Note the * is greedy.
\/ -- Find a literal /.
([^?]+) -- Capture everything that is not a question mark
\? -- Find a literal question mark
.* -- now match everything after the question mark
$ -- end of line anchor
这是一个在Java中使用它的快速示例。这是一个快速示例,需要在使用之前进行修改。
String urlFull = "https://local.host.com/order/faces/Home/myorder/exampleproduct?_adf.ctrl-state=mfun9p14r_19";
Pattern pattern = Pattern.compile("^.*\\/([^?]+)\\?.*$");
Matcher matcher = pattern.matcher(urlFull);
matcher.find();
String p = matcher.group(1);
System.out.println(p);
我没有理解为什么你写的原始正则表达式有.jspx?
,但如果问题还有更多,你需要更新问题才能解释。
答案 1 :(得分:0)
此模式可能适合您\?(.*)
。
此正则表达式找到一个问号并选择其后的所有内容。
答案 2 :(得分:0)
我用你的路径尝试了这个模式,它运行良好:([\w_-]*)(\.)*([\w_-]*)?(?=\?)
如果你的文件名有文件结尾,它也会匹配。
答案 3 :(得分:0)
要匹配输入中的exampleproduct
,这个基于前瞻性的正则表达式适合您:
[^/]+(?=\?)
在Java代码中:
Pattern pat = Pattern.compile("[^/]+(?=\\?)");