Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从字符串中准确捕获2个单词_Php_Regex - Fatal编程技术网

Php 从字符串中准确捕获2个单词

Php 从字符串中准确捕获2个单词,php,regex,Php,Regex,我正在使用正则表达式解析一个如下所示的命令: !hello foo bar 我想捕获foo和bar。如果命令只传递了2个参数,那么我希望正则表达式失败 这是我到目前为止的正则表达式: ^!hello (.*)$ 我知道{2}可以用来限制捕获的数量,但我不确定在这种情况下如何使用它 感谢而不是贪婪的(.*),我建议使用更具体的方法,如\w+来匹配一个或多个“word”字符。由于空格可能不重要,请使用\s+将它们分开。与其尝试使用{2},因为您希望正好有两个由空格分隔的组,更容易将每个组按字面意

我正在使用正则表达式解析一个如下所示的命令:

!hello foo bar
我想捕获
foo
bar
。如果命令只传递了2个参数,那么我希望正则表达式失败

这是我到目前为止的正则表达式:

^!hello (.*)$
我知道
{2}
可以用来限制捕获的数量,但我不确定在这种情况下如何使用它


感谢而不是贪婪的
(.*)
,我建议使用更具体的方法,如
\w+
来匹配一个或多个“word”字符。由于空格可能不重要,请使用
\s+
将它们分开。与其尝试使用
{2}
,因为您希望正好有两个由空格分隔的组,更容易将每个组按字面意思拼写为
\w+
,中间有空格要求

^!hello\s+(\w+)\s+(\w+)$
如果实际上不需要重用参数,请删除
()


与贪婪的
(.*)
不同,我建议使用更具体的方法,如
\w+
来匹配一个或多个“word”字符。由于空格可能不重要,请使用
\s+
将它们分开。与其尝试使用
{2}
,因为您希望正好有两个由空格分隔的组,更容易将每个组按字面意思拼写为
\w+
,中间有空格要求

^!hello\s+(\w+)\s+(\w+)$
如果实际上不需要重用参数,请删除
()


*捕获所有内容,包括空格。您要做的是捕获一个或多个字符的运行,这些字符可以是任何空白,然后是一些空白,然后是另一个非空白字符的运行

使用正则表达式语法捕获此信息的方法是:

^!您好\s+(\s+)\s+(\s+)\s*$

注意使用+而不是*-单词之间必须至少有一个空格,0个空格是不可接受的。每个单词还必须至少包含一个字符。这还允许运行尾随空格

请注意\S将识别任何非空白的内容。这意味着

hello%\uuuuuu第二个单词


会匹配的。如果要仅匹配单词的单词字符,请使用\w而不是\S(请参阅[HP手册,了解不同字符的定义,或创建您自己的字符的说明。

*捕获所有字符,包括空格。您要做的是捕获一个或多个字符,这些字符可以是任何字符,但可以是空格,然后是一些空格,然后是另一个非空格字符

使用正则表达式语法捕获此信息的方法是:

^!您好\s+(\s+)\s+(\s+)\s*$

注意使用+而不是*-单词之间必须至少有一个空格,0个空格是不可接受的。每个单词还必须至少有一个字符。这还允许使用尾随空格

请注意\S将识别任何非空白的内容。这意味着

hello%\uuuuuu第二个单词


将匹配。如果您只想匹配单词字符,请使用\w而不是\S(请参阅[HP手册以了解不同字符的定义或创建自己的字符的说明。

如果此操作失败或成功?
!hello“foo bar”foz
@Wrikken失败。它应该是两个单词,没有引号。谢谢你可以简单地使用explode
^!hello(?:\w+(:\w+)$
,但是参数包含的字符有限制吗?它们必须是a-z或a-z0-9或更多吗?这是失败还是成功?
!hello“foo bar”foz
@Wrikken失败。它应该包含两个单词,没有引号。谢谢你可以简单地使用explode
^!hello(?:\w+(:\w+)$
,但是参数包含的字符有限制吗?它们必须是a-z或a-z0-9或更多吗?