【问题标题】:Java String spit using regex with single forward slash not followed by a slashJava字符串吐出使用正则表达式与单个正斜杠不后跟斜杠
【发布时间】:2018-06-25 04:37:23
【问题描述】:

我想用一个正斜杠而不是两个正斜杠来分割 URL。

http://www.eclipse.org/swt/snippets/

我想将上面的 URL 拆分为http://www.eclipse.org、swt、sn-ps。

代码:

url = http://www.eclipse.org/swt/snippets/;
String[] truncUrl = url.split("/");

请用正则表达式指导我。

谢谢,

【问题讨论】:

  • 您可能不需要正则表达式。任何 url 解析器都可以告诉您协议是什么,以及主机是什么。 (见docs.oracle.com/javase/tutorial/networking/urls/urlInfo.html
  • 您忘记添加代码
  • 谢谢。我不想要主机,我只想截断第二个路径的 URL。
  • 尝试用代码向我们展示你想要做什么

标签: java regex split


【解决方案1】:

您需要一个否定的lookbehind(即“不先于”)和否定的lookahead(即“不跟随”)的组合。因此,您将拆分任何前面没有/ 且后面没有//

根据the Javadoc for Pattern-

  • 否定的lookbehind 由(?<!) 分隔
  • 负前瞻由(?!) 分隔

所以你想要的正则表达式是(?<!/)/(?!/)

【讨论】:

    【解决方案2】:

    作为补充答案,

    你可以使用这个表达式((?:http(s)?:\/\/)?[\w.&?=%#+:-]+)

    例子:

    import java.util.regex.Pattern;
    import java.util.regex.Matcher;
    import java.util.List;
    import java.util.ArrayList;
    
    public class MyClass {
        public static void main(String args[]) {
            String url = "https://stackoverflow.com/questions/51016377/java-string-spit-using-regex-with-single-forward-slash-not-followed-by-a-slash";
            Pattern rgx = Pattern.compile("((?:http(s)?://)?[\\w.&?=%#+:-]+)");
            Matcher m = rgx.matcher(url);
    
            List<String> list = new ArrayList<>();
            while (m.find())
                list.add(m.group(1));
    
            list.forEach(System.out::println);
        }
    }
    

    输出:

    https://stackoverflow.com
    questions
    51016377
    java-string-spit-using-regex-with-single-forward-slash-not-followed-by-a-slash
    

    【讨论】:

      猜你喜欢
      • 2019-08-26
      • 2011-07-02
      • 1970-01-01
      • 2015-07-14
      • 2015-03-15
      • 2019-01-05
      • 2013-01-28
      • 1970-01-01
      • 2012-07-30
      相关资源
      最近更新 更多