繁体   English   中英

PHP preg_match_all /正则表达式问题

[英]PHP preg_match_all / Regular Expression Issue

我有一串看起来像这样的文字:

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

我需要将其分为三部分:第一个+(2012-02-19-00-00-00)左侧的字符串,两个+(136571235812571)之间的字符串以及右侧的字符串+(UserABC.log)。

我现在有这段代码:

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

我遇到的问题是上面的代码返回:+136571235812571+

有没有办法使用RegEx给我全部三个数据(不带+号),还是我需要其他方法?

谢谢!

这基本上是通过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()

使用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);

如果您想进行微优化,则可以不使用RegEx而“更快”地完成。 显然,这取决于您要为其编写代码的上下文。

$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,但是当然这取决于硬件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM