【问题标题】:php pregmatch all elements to arrayphp preg 将所有元素匹配到数组
【发布时间】:2017-07-24 20:09:53
【问题描述】:
<a href="/position/memory1"> kw random</a>
<a href="/position/memory2"> kw2 random2</a>
<a href="/position/memory3"> 123 orange</a>
<a href="/position/memory4"> test apple</a>
<a href="/position/memory5"> bla</a>
<div>
    <a href="//examples.com/position/keyword1"> kw random</a>
    <a href="//examples.com/position/keyword2"> kw2 random2</a>
    <a href="//examples.com/position/keyword3" rel="nofollow"> 123 orange</a>
    <a href="//examples.com/position/keyword4"> test apple</a>
    <a href="//examples.com/position/keyword5" title="something"> bla</a>
</div>

如何将keyword1keyword2keyword3keyword4keyword5仅提取到php数组?

【问题讨论】:

    标签: php url preg-match-all


    【解决方案1】:

    如果关键字总是在&lt;a href="//examples.com/position/ 之后,这就是工作:

    $html = <<<EOD
    <a href="/position/memory1"> kw random</a>
    <a href="/position/memory2"> kw2 random2</a>
    <a href="/position/memory3"> 123 orange</a>
    <a href="/position/memory4"> test apple</a>
    <a href="/position/memory5"> bla</a>
    <div>
        <a href="//examples.com/position/keyword1"> kw random</a>
        <a href="//examples.com/position/keyword2"> kw2 random2</a>
        <a href="//examples.com/position/keyword3" rel="nofollow"> 123 orange</a>
        <a href="//examples.com/position/keyword4"> test apple</a>
        <a href="//examples.com/position/keyword5" title="something"> bla</a>
    </div>
    EOD;
    
    preg_match_all('~<a href="//examples.com/position/([^"]+)~', $html, $matches);
    var_dump($matches[1]);
    

    输出:

    array(5) {
      [0]=>
      string(8) "keyword1"
      [1]=>
      string(8) "keyword2"
      [2]=>
      string(8) "keyword3"
      [3]=>
      string(8) "keyword4"
      [4]=>
      string(8) "keyword5"
    }
    

    【讨论】:

      【解决方案2】:

      只使用 preg_match 函数:

      // $lines is your string
      // I think the regex is ok
      preg_match_all("/(?<=\/position\/).+(?=\\")/", $lines, $output_array);
      
      var_dump($output_array);
      

      【讨论】:

      • 我添加了:preg_match_all("/(?
      【解决方案3】:

      你可以做这样的事情。捕获 href 值和锚点的文本。然后评估链接上的匹配项。应该是不言自明的。

      <?php
       $data = '
      <a href="/position/memory1"> Bkw random</a>
      <a href="/position/memory2">B kw2 random2</a>
      <a href="/position/memory3"> 123 orange</a>
      <a href="/position/memory4"> test apple</a>
      <a href="/position/memory5"> bla</a>
      <a href="//examples.com/position/keyword1"> Akw random</a>
      <a href="//examples.com/position/keyword2"> Akw2 random2</a>
      <a href="//examples.com/position/keyword3" rel="nofollow"> 123 orange</a>
      <a href="//examples.com/position/keyword4"> test apple</a>
      <a href="//examples.com/position/keyword5" title="something"> bla</a>
      ';
      
      
      $matches = [];
      $needles = ['keyword1', 'keyword2', 'keyword3', 'keyword4', 'keyword5'];
      
      preg_match_all('#<a\s+href\s*=\s*"([^"]+)"[^>]*>([^<]+)</a>#i', $data, $matches, PREG_SET_ORDER);
      
      foreach ($matches as $match) {            
          foreach($needles as $needle) {
              if (stristr($match[1], $needle) !== false) {
                  echo $match[2];
              }
          }
      }
      

      不确定我是否关注您的 cmets。我认为您需要的零件在那里......

      //           $match[1]              $match[2]
      //<a href=" |/position/memory1| "> |Bkw random| </a>
      

      【讨论】:

      • 想法没问题,但我的关键字X是动态的,所以我只是收集一些关键字
      • 这是否意味着您要收集每个打开和关闭&lt;a&gt; 标签实例之间的所有内容?假设您在说“如何仅将关键字 1、关键字 2、关键字 3、关键字 4、关键字 5 提取到 php 数组?”时感到困惑?
      • 很抱歉,他们的关键字X是动态的,而且我不会收集href=/position/的另一部分,只有href=domain/position/XXXXX直到双引号
      • 我不会只提取 /position/memory1
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多