我正在尝试找到一个正则表达式模式来匹配下面的模式(不带引号):
"! comm“-匹配,match(0) = !comm,match(1) =comm
"!comm param1 param2“- Matches,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可以使用之外,我希望通过一个循序渐进的过程来实现这一点。
发布于 2012-11-26 14:56:17
您可以将这些模式组合成以下内容:
`^!(\S+)(?:\s+(\S+.*))?+$`https://stackoverflow.com/questions/13559224
复制相似问题