PHP preg_match获取最后一项

时间:2013-01-02 12:36:16

标签: php preg-match

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

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

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

我希望Matches['last']包含'Third',但它不起作用。相反,我得到Matches [0]来包含完整的字符串而没有别的。 我做错了什么?

请不要解决,我可以自己做,但我真的想让这个与preg_match一起工作

4 个答案:

答案 0 :(得分:6)

你有这个:

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

...但我想您正在寻找文字 |

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

答案 1 :(得分:2)

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

$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)];

答案 2 :(得分:2)

只需使用:

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

答案 3 :(得分:0)

获取最后一场比赛的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