拆分具有重复模式的字符串,保留分隔符

时间:2011-02-10 14:40:10

标签: php regex split

假设我们有一个命令解析器输入,其中给定字符(在这种情况下为一个点)提供两个函数:将字符串拆分为其他命令,并指示解析器重复上一个命令。

例如:

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作为正则表达式,但使用(\.)并没有更好的效果。

2 个答案:

答案 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