我有一串文字如下:
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给我所有三个数据(没有+标记)或者我需要一个不同的方法吗?
谢谢!
答案 0 :(得分: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');
答案 1 :(得分: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
)
$str = '2012-02-19-00-00-00+136571235812571+UserABC.log';
preg_match_all('/[^\+]+/', $str, $matches);
print_r($matches);
答案 2 :(得分:1)
如果您想进行微优化,可以在不使用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);
此代码需要0.003,而我的计算机上的RegEx为0.007,但当然这取决于硬件。