PHP-Regex用于匹配两个以上字母的单词

PHP-Regex用于匹配两个以上字母的单词,php,regex,Php,Regex,我试图将一个字符串分解成一个单词数组,条件是一个单词只有在有两个或更多字母时才被认为是这样的,我得到的是以下内容,但只有一个字母的单词仍然被认为是匹配的: $input_string = "I have a cake inside my fridge"; $string_array = preg_split("/[^\w{2,}]*([\s]+([^\w{2,}])*|$)/", $input_string, -1, PREG_SPLIT_NO_EMPT

我试图将一个字符串分解成一个单词数组,条件是一个单词只有在有两个或更多字母时才被认为是这样的,我得到的是以下内容,但只有一个字母的单词仍然被认为是匹配的:

$input_string = "I have a cake inside my fridge";

$string_array = preg_split("/[^\w{2,}]*([\s]+([^\w{2,}])*|$)/", $input_string, -1, PREG_SPLIT_NO_EMPTY);

但是我仍然得到“I”和“a”这两个词,为什么它不起作用?

如果您只是想捕获所有包含2个或更多字母的“单词”,那么只需在此处使用
preg\u match\u all

$input_string = "I have a cake inside my fridge";
preg_match_all("/\b\w{2,}\b/", $input_string, $matches);
print_r($matches[0]);
这张照片是:

Array
(
    [0] => have
    [1] => cake
    [2] => inside
    [3] => my
    [4] => fridge
)

它不起作用的原因是因为模式
[^\w{2,}]*([\s]+([^\w{2,}])*.$)
,然后在这些空格上拆分,生成一个包含所有单词的数组。这是由于匹配空白字符的
\s
,以及使用同样匹配空白字符的否定字符类
[^\w{2,}]

如果要使用拆分,还必须匹配单个单词字符,以便它们不属于结果的一部分


如果必须使用拆分,则可以匹配由可选的水平空白字符包围的单个单词字符以删除这些字符,也可以匹配1+个水平空白字符

\h*\b\w\b\h*|\h+

比如说

$input_string = "I have a cake inside my fridge";
$string_array = preg_split("/\h*\b\w\b\h*|\h+/", $input_string, -1, PREG_SPLIT_NO_EMPTY);
print_r($string_array);
输出

Array
(
    [0] => have
    [1] => cake
    [2] => inside
    [3] => my
    [4] => fridge
)


如果要匹配至少由2个字符组成的所有字符串,还可以使用
\S{2,}
with.

Alt而不使用正则表达式。。i、 e减少混乱,使用数组_过滤器分解:@lawrencerone是的,谢谢,但它必须使用正则表达式模式完成:/您在这里期望的确切输出是什么?