2011-02-10 113 views
1

假设我们有一个命令解析器输入,其中给定字符(在这种情况下是一个点)服务于两个功能:将字符串拆分为其他命令,并指示解析器重复最后的命令。用重复模式分割字符串,保留分隔符

例如:

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] =>拾item
[2] =>去西
[3] =>
[4] =>
[5] =>北上
[6] =>
[7] =>

这显然是在两种情况下不正确 - 没有点返回和一个额外的在结束命令。点必须返回,所以我们的解析器可以计算出用户想要重复他们的最后一个命令。

尽管使用(\.)作为正则表达式,但使用PREG_SPLIT_DELIM_CAPTURE的效果并不理想。

回答

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作进一步参考。

1
<?php 

$temp = 'go north.pick up item.go west...go north..'; 
preg_match_all('/[^.]*\./', $temp, $r); 
var_dump($r); 

请参阅http://ideone.com/a7o7v了解输出结果。

相关问题