【问题标题】:PHP preg_match get the last itemPHP preg_match 获取最后一项
【发布时间】:2013-01-02 12:36:16
【问题描述】:

我有一个包含项目列表的 PHP 字符串,我想得到最后一个。

现实要复杂得多,但归结为:

$Line = 'First|Second|Third';
if ( preg_match( '@^.*|(?P<last>.+)$@', $Line, $Matches ) > 0 )
{
    print_r($Matches);
}

我希望Matches['last'] 包含“第三”,但它不起作用。相反,我让 Matches[0] 包含完整的字符串,仅此而已。 我做错了什么?

请不要使用变通方法,我可以自己做,但我真的很想用 preg_match 做这个

【问题讨论】:

  • 你能解释一下为什么它必须是正则表达式吗?如果分隔符只是管道,那么end(explode('|', $line) 真的会容易得多。或者也许是带有 strrpos 的 substr。
  • 如果你只想要最后一部分,你可以做substr(strrchr($Line, '|'), 1); 不确定需要使用正则表达式的原因。你能详细说明一下为什么吗?
  • 它必须是正则表达式,因为实际的字符串比我的示例复杂得多。你是对的,我永远不会在这么简单的字符串上使用正则表达式。

标签: php preg-match


【解决方案1】:

你有这个:

'@^.*|(?P<last>.+)$@'
     ^

...但我猜你正在寻找一个文字 |:

'@^.*\|(?P<last>.+)$@'
     ^^

【讨论】:

    【解决方案2】:

    只需使用:

     $Line = 'First|Second|Third' ;
       $lastword = explode('|', $line);
        echo $lastword['2'];
    

    【讨论】:

      【解决方案3】:

      如果你的语法总是有点相同,我的意思是使用| 作为分隔符,如果你喜欢,你可以执行以下操作。

      $Line = 'First|Second|Third' ;
      $line_array = explode('|', $Line);
      $line_count = count($line_array) - 1;
      
      echo $line_array[$line_count];
      

      $Line = 'First|Second|Third' ;
      $line_array = explode('|', $Line);
      end($line_array);
      
      echo $line_array[key($line_array)];
      

      【讨论】:

        【解决方案4】:

        获取最后一个匹配的 PHP preg_match 示例:

        <?php
          $mystring = "stuff://sometext/2010-01-01/foobar/2016-12-12.csv";
          preg_match_all('/\d{4}\-\d{2}\-\d{2}/', $mystring, $matches);
          print_r($matches);
          print("\nlast match: \n");
          print_r($matches[0][count($matches[0])-1]);
          print("\n");
        ?>
        

        打印返回的整个对象和最后一个匹配项:

        Array
        (
            [0] => Array
                (
                    [0] => 2010-01-01
                    [1] => 2016-12-12
                )
        
        )
        
        last match: 
        2016-12-12
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-07
          • 1970-01-01
          • 1970-01-01
          • 2014-06-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多