2013-01-02 76 views
3

我有一個包含項目列表的PHP字符串,我想獲得最後一項。PHP preg_match獲取最後一項

現實情況要複雜得多,但它歸結爲:

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

我希望Matches['last']遏制「三」,但它不工作。相反,我得到匹配[0]包含完整的字符串,沒有別的。 我在做什麼錯?

請沒有解決方法,我可以做我自己,但我真的很喜歡這個用的preg_match工作

+3

請問您能解釋爲什麼它必須是正則表達式嗎?如果分隔符是隻是管道,然後'結束(爆炸(「|」,$線)'真的會容易得多或許與strrpos SUBSTR – Gordon

+0

如果你只是想最後一個部分,你可以做'SUBSTR(strrchr(。 $線,「|」),1);'不知道後面需要使用正則表達式的推理,你可能解釋爲何 –

+0

它必須是正則表達式,因爲實際的字符串比我的例子更復雜一點?你是對的,我絕不會在這樣一個簡單的字符串上使用正則表達式。 –

回答

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

只需使用:

$Line = 'First|Second|Third' ; 
    $lastword = explode('|', $line); 
    echo $lastword['2']; 
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