2011-02-10 19 views
1

与えられた文字(この場合はドット)が2つの機能を果たすコマンドパーサ入力を持っているとしましょう:文字列を他のコマンドに分割し、最後のコマンド。例えばリピートパターンの文字列を保持区切り文字で区切る

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] =>

行く

これは、2つのインスタンスで、明らかに間違っている - 最後に返されていない点や、余分なコマンド。パーサーが最後のコマンドを繰り返し実行してもらうためには、ドットを返す必要があります。

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を参照してください。

関連する問題