【问题标题】:Only take URL Part from String仅从字符串中获取 URL 部分
【发布时间】:2013-05-18 13:59:45
【问题描述】:

我想从字符串中获取 URL,以便可以在 WebView 中显示 URL。

示例字符串:

exp 1- Hello dilip refer this url www.google.com.
exp 2- hi ramesh this is good for android http://android.com

我只想要www.google.comhttp://android.com 如何将它们从字符串中拆分出来

【问题讨论】:

  • 会一直在句尾吗?
  • 没有!!用户也可以在url前后输入文字...
  • 你应该在 url 之后包含一个带有 ext 的示例。

标签: java android regex string android-webview


【解决方案1】:

如果您只是想从字符串中检索 URL,我建议您只需在 stackoverflow 上查找问题。

像这样:

public static final String URL_REGEX = "^((https?|ftp)://|(www|ftp)\\.)?[a-z0-9-]+(\\.[a-    z0-9-]+)+([/?].*)?$";

 Pattern p = Pattern.compile(URL_REGEX);
 Matcher m = p.matcher("example.com");//replace with string to compare
 if(m.find()) {
 System.out.println("String contains URL");
}

来自这个帖子:https://stackoverflow.com/a/11007981/1164919 您会在同一线程中找到更多关于如何执行此操作的 sn-ps 和建议。

但是,如果您想自己动手来了解它是如何工作的。您还可以制作自己的简单 sn-p 来检测字符串中是否存在 URL。 例如,您也可以使用if(String.Contains("something"))。如果您的输入存在于字符串中,这将简单地返回 true 或 false。

有几十个例子等着你去阅读。 搜索类似:regex 或者如果这很难,String.split 等。

【讨论】:

    【解决方案2】:

    我建议将字符串拆分为所有没有空格的子字符串,然后选择包含“。”的子字符串。嵌入其他字符之间。在正常的英语中,一个“。”只会出现在 URL 中。

    【讨论】:

      【解决方案3】:

      这是一种可能的解决方案。下面的正则表达式假定它在一个句点跟在一个字母后面时找到了一个 URL,并且一个字母紧跟在那个句点后面。以下是它将匹配的一些示例:

      t.t
      hello.aspx
      www.google.com
      http://android.com
      http://android.com/test/test.aspx
      https://www.stackoverflow.com/questions.html?type=android
      www.google.com/android/games.aspx#hello
      

      这是正则表达式(与 IgnoreCase 选项一起使用):

      (https?://)?[-A-Z0-9]+\.[-A-Z0-9.]+(/[-A-Z0-9+&@#/%=~_|!:,.;?]*)?
      

      针对您的示例文本运行它会返回您想要的两个 URL。

      这里有一些使用此正则表达式的示例 Java 代码:

      String testInputString = "Test 1 www.google.co.uk Test 2 www.google.co.in Test 3 www.google.com Test 4 http://android.com Test 5 meta.stackoverflow.com";
      Pattern p = Pattern.compile("(https?://)?[-A-Z0-9]+\\.[-A-Z0-9.]+(/[-A-Z0-9+&@#/%=~_|!:,.;?]*)?", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
      Matcher m = p.matcher(testInputString);
      while (m.find()) {
          System.out.println(m.group(0));
      } 
      

      【讨论】:

      • 您缺少转义字符 (https?://)?[-A-Z0-9]\\.[-A-Z0-9.]+(/[-A-Z0 -9+&@#/%=~_|!:,.;?]*)?”。但是我尝试了正则表达式对我不起作用。字符串与我的答案一样。我在字符串不起作用
      • @Raghunandan - 我的答案中的正则表达式确实是原始的并且没有预先转义。我觉得当正则表达式没有出现在示例代码块中时,最好不要转义字符。我重新测试了表达式,它工作得很好。尝试时是否使正则表达式不区分大小写?如果您不想使用“不区分大小写”选项,则可以改用以下正则表达式。 (https?://)?[-a-zA-Z0-9]+\.[-a-zA-Z0-9.]+(/[-a-zA-Z0-9+&@#/% =~_|!:,.;?]*)?
      • 上面的正则表达式给了我非法的转义字符。我正在android和java上测试它。如果我逃避非法行为。正则表达式与我的答案中的字符串不匹配。该更改不适用于“你好 dilip 参考 www.google.co.uk www.google.co.in 这个网址 www.google.com。嗨,ramesh,这对 android android.com你好 meta.stackoverflow.com 有好处” ;
      • @Raghunandan - 我在答案中添加了一些示例 Java 代码。使用您的测试输入字符串对我来说它工作正常。我还在regexplanet.com/advanced/java/index.html 上成功测试了正则表达式。
      【解决方案4】:

      假设您的字符串如下所示,您可以使用下面的正则表达式来提取 www.google.com 和 http://android.com

      String s = "Hello dilip refer this url www.google.com. hi ramesh this is good for  android http://android.com";   
      Pattern pc = Pattern.compile("((http://)|(www.))[A-Z,a-z]+.com");
      Matcher matcher = pc.matcher(s);
      while(matcher.find())
      {
         System.out.println("String Extracted   "+matcher.group());
      }
      

      输出

      String Extracted   www.google.com
      String Extracted   http://android.com 
      

      注意:以上内容不适用于http://meta.stackoverflow.com、www.google.co.uk 和 b3ta.com 这类网址。

      编辑:

             String s = "Hello dilip refer www.google.co.uk www.google.co.in this url www.google.com. hi ramesh this is good for android http://android.com hello there meta.stackoverflow.com";   
             Pattern pc = Pattern.compile("((http://)|(www.))([A-Z,a-z,0-9])+((.com)|(.co.[a-z]{2}))|([A-Z,a-z,0-9].[A-Z,a-z,0-9])+.com");
             Matcher matcher = pc.matcher(s);
             while(matcher.find())
             {
                System.out.println("String Extracted   "+matcher.group());
             }
      

      输出:

             String Extracted   www.google.co.uk
             String Extracted   www.google.co.in
             String Extracted   www.google.com
             String Extracted   http://android.com
             String Extracted   meta.stackoverflow.com
      

      即使是上面的也不是完美的。但是,如果您可以修改上述正则表达式,它应该会对您有所帮助

      【讨论】:

      • 适用于本例,但不适用于 http://meta.stackoverflow.comwww.google.co.ukb3ta.com
      • @KenY-N 我已经编辑了帖子,但即使这样也可能并不完美。但我想它涵盖了更多的案例
      猜你喜欢
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2012-07-23
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多