Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Regex根据用户名从href属性提取URL_Php_Regex - Fatal编程技术网

Php Regex根据用户名从href属性提取URL

Php Regex根据用户名从href属性提取URL,php,regex,Php,Regex,我试图提取特定用户之后的所有链接,但我的正则表达式仅获取一个链接: HTML: 不幸的是,我不熟悉电报信使。我几乎可以肯定你的问题不能用正则表达式(轻松)解决。这条规则有太多的例外。因此,我将提供两个备选方案: 使用合适的HTML解析器,扔掉不需要的东西,捕获相关信息 使用黑客 解析HTML 扔掉所有没有带来相关信息的东西 您将得到一个名称和链接列表 如果一个名字后面跟着另一个名字,删除它,因为它没有链接 加载数组中剩余的内容,以及与其代表用户关联的链接 解析后,您将拥有与以下类似的结构

我试图提取特定用户之后的所有链接,但我的正则表达式仅获取一个链接:

HTML:


不幸的是,我不熟悉电报信使。我几乎可以肯定你的问题不能用正则表达式(轻松)解决。这条规则有太多的例外。因此,我将提供两个备选方案:

  • 使用合适的HTML解析器,扔掉不需要的东西,捕获相关信息

  • 使用黑客

    • 解析HTML
      • 扔掉所有没有带来相关信息的东西
      • 您将得到一个名称和链接列表
    • 如果一个名字后面跟着另一个名字,删除它,因为它没有链接
    • 加载数组中剩余的内容,以及与其代表用户关联的链接
  • 解析后,您将拥有与以下类似的结构:

    • 名字
      • 链接
      • 链接

    • name你能用两个正则表达式吗?首先用用户名匹配整个区域,然后匹配URL

      preg_match('/(?<=USERNAME).*(?<=href=").*?</s', $string, $matches);
      
      preg_match_all('/(?<=href=").*?(?=<)/', $matches[0], $newMatches);
      
      var_dump($newMatches);
      

      你希望有多少链接?总是正好两个?超过2个?html结构是否从一个实例(用户)变为另一个实例(用户)?虽然有时可以使用正则表达式来处理涉及html的“次要”任务,但您的示例似乎需要一个能够理解html结构的工具,以便正确提取信息。不总是2个,在这种情况下可能是一个或多个,HTML解析器可能更有用,结果更准确each@Diok没问题!请接受此答案作为解决方案。;)
      preg_match_all('/USERNAME[\s\S]*?href="(.*?)</', $data, $matches);
      
      print_r($matches);
      
      Array
      (
          [0] => Array
              (
                  [0] => FullCapture
      
          [1] => Array
              (
                  [0] => https://google.com
              )
      
      )
      
      preg_match('/(?<=USERNAME).*(?<=href=").*?</s', $string, $matches);
      
      preg_match_all('/(?<=href=").*?(?=<)/', $matches[0], $newMatches);
      
      var_dump($newMatches);
      
      array(1) {
        [0]=>
        array(2) {
          [0]=>
          string(18) "https://google.com"
          [1]=>
          string(17) "https://yahoo.com"
        }
      }