如何使用正则表达式为此模式提取子字符串

时间:2014-11-08 15:19:38

标签: java regex substring

我必须在/?之间提取一个字符串,即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"));

}

由于 拉吉

4 个答案:

答案 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("[^/]+(?=\\?)");

RegEx Demo