假设我们有一个命令解析器输入,其中给定字符(在这种情况下为一个点)提供两个函数:将字符串拆分为其他命令,并指示解析器重复上一个命令。
例如:
go north.pick up item.go west...go north..
这将实现的目标是“往北走,拿起物品,向西走三次,向北走两次”。但是,使用preg_split
时,我无法获得所需的输出。
我现在所拥有的只是:
$temp = 'go north.pick up item.go west...go north..';
preg_split('/\.)/', $temp);
产生:
阵列
(
[0] =>去北 [1] =>拿起物品
[2] =>去西 [3] =>
[4] =>
[5] =>去北 [6] =>
[7] =>
)
这在两个实例中显然是不正确的 - 没有返回点和最后的额外命令。必须返回这些点,以便我们的解析器可以解决用户想要重复的最后一个命令。
尽管使用PREG_SPLIT_DELIM_CAPTURE
作为正则表达式,但使用(\.)
并没有更好的效果。
答案 0 :(得分:1)
<?php
$temp = 'go north.pick up item.go west...go north..';
preg_match_all('/[^.]*\./', $temp, $r);
var_dump($r);
有关输出的演示,请参阅http://ideone.com/a7o7v。
答案 1 :(得分:0)
preg_match_all('~([^.]+)(\.+)~', $input, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
// $match[1] is what to do and $match[2] contains the dots.
echo 'Do ', $match[1], ' ', strlen($match[2]), ' times', "\n";
}
有关详细信息,请参阅preg_match_all
。