以下をパターンと一致させる正規表現パターンを見つけようとしています(引用符なし):
"!comm" - マッチ、match(0) = !comm、match(1) = comm
"!comm param1 param2" - マッチ、match(0) = !comm param1 param2、match(1) = comm、match(2) = param1 param2
"!comm " - 一致しない
私は次のように始めました:
$string1 = "!comm";
$string2 = "!comm param1 param2";
$string3 = "!comm ";
preg_match("`!(.*?)$`", $string1, $match1);
preg_match("`!(.*?)\s(.*)$`", $string2, $match2);
preg_match("`!(.*?)\S$`", $string3, $match3);
echo "<h1>Test 1</h1>";
echo "<pre>";
print_r($match1);
print_r($match2);
print_r($match3);
echo "</pre>";
これにより、私が望む正確な出力が得られますが、それらは一般化されておらず、個人としてのみ機能しています。
Array
(
[0] => !comm
[1] => comm
)
Array
(
[0] => !comm param1 param2
[1] => comm
[2] => param1 param2
)
Array
(
)
次に、それらを次のようにマージしようとしました:
`!(.+)($|\s(.*)$|\S$)`
しかし、明らかに失敗しました。私は自分の考えが間違っていることを知っています。他にもいくつか試してみましたが、保存していませんが、しばらくグーグルで調べた後、ほとんどブラインドシューティングをしていました。先読みの方法、または if/else の方法は、「!comm param1 param2」と「!comm」が一致するか、それぞれが個別に終了しました。
これは RegEx で実行可能だと思いますが、RegEx にはまだ慣れていないので、自分の考え方ではまだその場所を見つけられていないと感じています。したがって、完全に機能する RegEx をすぐに使用できるというだけでなく、このようなことを実現するための段階的なプロセスが必要です。