Php 用于在文本中匹配URL的方法

Php 用于在文本中匹配URL的方法,php,Php,在PHP中,建议使用什么方法来匹配文本体中的所有URL(即,一个表单$\u POST textarea而不是一个“单词”字符串) 我正在寻找一种方法,它可以匹配绝大多数的URL,而不是一个超标准兼容的包罗万象。我喜欢匹配的示例: www.google.com 谷歌网站 具有各种查询数据的上述任一项(即/?foo=bar) 理想情况下,结果将放入关联数组中 我知道parse_url不太合适。我听说使用正则表达式充满了问题。但我也听说filter_var存在重大问题,其中最重要的问题是需要一

在PHP中,建议使用什么方法来匹配文本体中的所有URL(即,一个表单$\u POST textarea而不是一个“单词”字符串)

我正在寻找一种方法,它可以匹配绝大多数的URL,而不是一个超标准兼容的包罗万象。我喜欢匹配的示例:

  • www.google.com
  • 谷歌网站
  • 具有各种查询数据的上述任一项(即/?foo=bar)
理想情况下,结果将放入关联数组中

我知道parse_url不太合适。我听说使用正则表达式充满了问题。但我也听说filter_var存在重大问题,其中最重要的问题是需要一个方案。你们都用什么技巧


谢谢你

在你的情况下,我认为针对多个正则表达式进行测试是一种可行的方法

以下是一些与www.google.com相匹配的正则表达式示例:

  • /^google[.]com/
  • /^http:\/\/www[.]google[.]com/

在您的情况下,我认为针对多个正则表达式进行测试是一种可行的方法

以下是一些与www.google.com相匹配的正则表达式示例:

  • /^google[.]com/
  • /^http:\/\/www[.]google[.]com/

    • 它将以文本形式提取上述所有URL

      <?php
      
      $string='http://www.google.com?q=1000
      http://google.com?xlkd=0
      www.google.com?asdfsdf=asdf
      google.com?234324';
      
      
      preg_match_all('#\b(?:http(?:s)?:\/\/)?(?:www\.)??[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#', $string, $match);
      
      echo "<pre>";
      print_r($match);
      

      希望它会有帮助

      它将以文本形式提取上述所有URL

      <?php
      
      $string='http://www.google.com?q=1000
      http://google.com?xlkd=0
      www.google.com?asdfsdf=asdf
      google.com?234324';
      
      
      preg_match_all('#\b(?:http(?:s)?:\/\/)?(?:www\.)??[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#', $string, $match);
      
      echo "<pre>";
      print_r($match);
      

      希望这会有帮助

      正则表达式应该适合于此。然而,“google.com”可能会导致许多误报。你应该考虑匹配一个有效的TLD列表。然而,“google.com”可能会导致许多误报。你应该考虑匹配一个有效的TLD列表。谢谢,这是一个很好的开始,但是这也似乎与非URL文本匹配。在多维的第二个项目中,是的,但是看起来你只能使用<代码> $Matt(0)< /代码>谢谢,这是一个好的开始。但这似乎也与非url文本匹配。在多维文本的第二项中,是的,但似乎只能使用
      $match[0]