我正在尝试找到一个正则表达式模式来匹配以下与模式(不带引号):
"!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 之外,我还想要一个逐步的过程来实现这一点。