3

アイテムのリストを含むPHP文字列があり、最後の文字列を取得したいと思います。

現実ははるかに複雑ですが、要約すると次のようになります。

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

'Third'が含まれていると思いMatches['last']ますが、機能しません。むしろ、Matches[0]に完全な文字列だけが含まれるようにします。私は何が間違っているのですか?

回避策はありません。自分で行うことはできますが、preg_matchでこれを機能させたいと思います。

4

4 に答える 4

6

あなたはこれを持っています:

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

...しかし、私はあなたが文字通り |を探していると思います:

'@^.*\|(?P<last>.+)$@'
     ^^
于 2013-01-02T12:42:25.227 に答える
2

構文が常に同じである場合、つまり、|区切り文字としてasを使用する場合は、必要に応じて次のようにすることができます。

$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)];
于 2013-01-02T12:42:34.813 に答える
2

使用するだけです:

 $Line = 'First|Second|Third' ;
   $lastword = explode('|', $line);
    echo $lastword['2'];
于 2013-01-02T12:43:07.677 に答える
0

最後の一致を取得するためのPHPpreg_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
于 2016-12-20T19:28:18.307 に答える