从 URL 中提取部分字符串 - Java Regex

Posted

技术标签:

【中文标题】从 URL 中提取部分字符串 - Java Regex【英文标题】:Extract part of a string from a URL - Java Regex 【发布时间】:2014-08-23 20:34:18 【问题描述】:

我正在尝试提取 '/' 和 '.' 之间的字符串的网址。例如,我有一个类似“some.com/part1/part2/part3/stringINeed.xyz”的 URL。我需要从上面的 URL 中提取“stringINeed”,即最后一个 '/' 和 '.' 之间的那个。没有其他的。

到目前为止,我尝试了以下操作,但输出为空:

import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

class Extract

    public static void main (String[] args) throws java.lang.Exception
    
        String str = "part1/part2/part3/stringINeed.xyz" ;
        Pattern pattern = Pattern.compile("/(.*?).");
        Matcher matcher = pattern.matcher(str);
        if (matcher.find()) 
     System.out.println(matcher.group(1));
        
    

我的代码有什么问题。有人可以帮忙吗?

【问题讨论】:

您有完整的 URL 还是只是其中的一部分? 我有一个完整的 URL,例如 example.com/part1/part2 等等。部分 URL 也可以工作,因为我最终会从 servlet 请求中提取 URI 【参考方案1】:

使用这个正则表达式:

[^/.]+(?=\.[^.]+$)

见demo。

在 Java 中:

Pattern regex = Pattern.compile("[^/.]+(?=\\.[^.]+$)");
Matcher regexMatcher = regex.matcher(subjectString);
if (regexMatcher.find()) 
    ResultString = regexMatcher.group();
 

说明

[^/.]+ 匹配任何不是斜线或点的字符 前瞻 (?=\.[^.]+) 断言后面是一个点,后面是非点和字符串的结尾

【讨论】:

谢谢,很高兴它有帮助。 :) 感谢您的回答 Zx81。为我工作!【参考方案2】:

没有正则表达式

str.substring(str.lastIndexOf("/"), str.lastIndexOf(".")).replaceAll("/", "");

【讨论】:

以上是关于从 URL 中提取部分字符串 - Java Regex的主要内容,如果未能解决你的问题,请参考以下文章

从Javascript中的URL中提取一部分[重复]

C语言怎么把字符串中的某一部分提取出来?

使用 Java + 正则表达式从文本文档中提取 URL

如下一串字符串,用python怎样提取其中的url,并放到列表中?

在 Amazon Redshift 中提取部分字符串

正则表达式提取数字