首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP - preg_match -匹配!word,或匹配!word后跟word

PHP - preg_match -匹配!word,或匹配!word后跟word
EN

Stack Overflow用户
提问于 2012-11-26 13:41:08
回答 1查看 532关注 0票数 1

我正在尝试找到一个正则表达式模式来匹配下面的模式(不带引号):

"! comm“-匹配,match(0) = !comm,match(1) =comm

"!comm param1 param2“- Matches,match(0) = !comm param1 param2,match(1) = comm,match(2) = param1 param2

"!comm“-不应匹配

我是这样开始的:

代码语言:javascript
复制
$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>";

这给出了我想要的确切输出,只是它们不是泛化的,只作为个体工作:

代码语言:javascript
复制
Array
(
    [0] => !comm
    [1] => comm
)
Array
(
    [0] => !comm param1 param2
    [1] => comm
    [2] => param1 param2
)
Array
(
)

然后尝试将它们合并为:

代码语言:javascript
复制
`!(.+)($|\s(.*)$|\S$)`

但显然失败了,我知道我想错了。我尝试了一些其他的,虽然我还没有保存起来,但在谷歌了一段时间后,我大多是盲目拍摄。前瞻性的方式,或者if/else方式,要么已经结束了"!comm param1 param2“和"!comm”的匹配,要么只是各自作为单独的。

我确实觉得这在RegEx中是可行的,但我在RegEx中还是太新了,我觉得我的思维方式还没有找到合适的位置。因此,除了功能齐全的RegEx可以使用之外,我希望通过一个循序渐进的过程来实现这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-26 14:56:17

您可以将这些模式组合成以下内容:

代码语言:javascript
复制
`^!(\S+)(?:\s+(\S+.*))?+$`

  1. 以"!“开头的
  2. "comm”应为非空格字符。
  3. 后跟空格或任意数量的空格和参数字符串
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13559224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档