如何在Java中使用正则表达式从字符串中提取子字符串?

时间:2019-03-07 06:18:41

标签: java regex

我有一个字符串xxxxxxxxsrc="/slm/attachment/63338424306/Note.jpg"xxxxxxxx现在,我想从字符串中提取子字符串slm/attachment/63338424306/Note.jpgNote.jpg到变量i.e. temp1 & temp2.

我该如何在Java中使用正则表达式呢?

  

注意:63338424306可以是任何随机数。 &Note.jpg可以是任何东西   例如Note.png或abc.jpg或xxxx.yyy等。

请帮助我使用正则表达式提取这两个字符串。

2 个答案:

答案 0 :(得分:1)

您可以使用反面的表情来获取文件名

((?:.(?<!/))+)\"

及正则表达式下方以获取完整路径

/(.*)\"

示例代码

public static void main(String[] args) {
    Pattern pattern = Pattern.compile("/(.*)\"");
    Pattern pattern1 = Pattern.compile("((?:.(?<!/))+)\"");
    String matchString = "/slm/attachment/63338424306/Note.jpg\"xxxxxxxx";
    Matcher matcher = pattern.matcher(matchString);
    String fullString = "";
    while (matcher.find()) {
        fullString = matcher.group(1);
    }
    matcher = pattern1.matcher(matchString);
    String fileName = "";
    while (matcher.find()) {
        fileName = matcher.group(1);
    }

    System.out.println(fullString + " " + fileName);
}

答案 1 :(得分:1)

根据您的评论,使用下面在我的代码中声明的字符串:

请澄清您输入的字符串是否不是这样或我缺少什么。

public static void main(String[] args) {

    String str = "xxxxxxxxsrc=\"/slm/attachment/63338424306/Note.jpg\"xxxxxxxx";
    String url = null;

    // The below pattern will grab string between quotes
    Pattern p = Pattern.compile("\"([^\"]*)\"");
    Matcher m = p.matcher(str);
    while (m.find()) {
        System.out.println(m.group(1));
        url = m.group(1);
    }

    // and this will grab filename from the path(url)
    p = Pattern.compile("(?:.(?<!/))+$");
    m = p.matcher(url);
    while (m.find()) {
        System.out.println(m.group());
    }
}