1

次のようなテキストの文字列があります。

2012-02-19-00-00-00+136571235812571+UserABC.log

これを3つのデータに分割する必要があります。最初の+(2012-02-19-00-00-00)の左側の文字列、2つの+(136571235812571)の間の文字列、および+(UserABC.log)。

私は現在このコードを持っています:

preg_match_all('\+(.*?)\+', $text, $match);

私が抱えている問題は、上記のコードが次を返すことです:+136571235812571 +

RegExを使用して3つのデータすべて(+マークなし)を取得する方法はありますか、それとも別のアプローチが必要ですか?

ありがとうございました!

4

3 に答える 3

3

これは基本的に以下で行われexplode()ます:

explode('+', '2012-02-19-00-00-00+136571235812571+UserABC.log');
// ['2012-02-19-00-00-00', '136571235812571', 'UserABC.log']

list()それらを変数に直接割り当てるために使用できます。

list($date, $ts, $name) = explode('+', '2012-02-19-00-00-00+136571235812571+UserABC.log');

以下も参照してください。explode() list()

于 2013-02-26T13:54:10.100 に答える
1

マイクロ最適化を行いたい場合は、正規表現を使用せずにこれを「より速く」行うことができます。明らかに、これはコードを書いているコンテキストに依存します。

$string = "2012-02-19-00-00-00+136571235812571+UserABC.log";
$firstPlusPos = strpos($string, "+");
$secondPlusPos = strpos($string, "+", $firstPlusPos + 1);
$part1 = substr($string, 0, $firstPlusPos);
$part2 = substr($string, $firstPlusPos + 1, $secondPlusPos - $firstPlusPos - 1);
$part3 = substr($string, $secondPlusPos + 1);

このコードは、私のコンピューターの RegEx の 0.007 と比較して 0.003 かかりますが、もちろん、これはハードウェアによって異なります。

于 2013-02-26T14:31:53.563 に答える
1

preg_split() の使用:

$str = '2012-02-19-00-00-00+136571235812571+UserABC.log';
$matches = preg_split('/\+/', $str);
print_r($matches);

出力:

Array
(
    [0] => 2012-02-19-00-00-00
    [1] => 136571235812571
    [2] => UserABC.log
)

preg_match_all() の使用:

$str = '2012-02-19-00-00-00+136571235812571+UserABC.log';
preg_match_all('/[^\+]+/', $str, $matches);
print_r($matches);
于 2013-02-26T13:57:02.207 に答える