Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用重复模式拆分字符串,保留分隔符_Php_Regex_Split - Fatal编程技术网

Php 使用重复模式拆分字符串,保留分隔符

Php 使用重复模式拆分字符串,保留分隔符,php,regex,split,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('/\.)/'

假设我们有一个命令解析器输入,给定的字符(本例中为点)用于两个功能:将字符串拆分为其他命令,并指示解析器重复最后一个命令

例如:

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\u SPLIT\u DELIM\u CAPTURE
并没有任何好处,尽管使用
(\)
作为正则表达式

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";
}
有关更多参考,请参阅

<?php

$temp = 'go north.pick up item.go west...go north..';
preg_match_all('/[^.]*\./', $temp, $r);
var_dump($r);
请参阅以获取更多参考。


<?php

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