繁体   English   中英

PHP-preg_match-匹配!单词,或匹配!word后跟单词

[英]PHP - preg_match - Match a !word, or match !word followed by word(s)

我正在尝试找到一个正则表达式模式,以将以下内容与模式(不带引号)匹配:

“!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$)`

但是显然失败了,而且我知道我在想错。 我尝试了几次,尽管我没有保存下来,但是在谷歌搜索了一段时间后,我大部分时间都是盲目射击。 前瞻方式,或者如果/其他方式,要么已经结束了“!comm param1 param2”和“!comm”的匹配,要么只是各自匹配。

我确实认为这在RegEx中是可行的,但是在RegEx中我还是太新了,我觉得我的思维方式还没有找到合适的位置。 因此,除了准备使用功能齐全的RegEx之外,我还希望逐步实现此目标。

您可以将模式组合为:

`^!(\S+)(?:\s+(\S+.*))?+$`
  1. 从...开始 ”!”
  2. “ comm”应为非空格字符。
  3. 然后没有任何内容或任何数量的空格和参数字符串

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM