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);