Php regexp";仅删除一个带字符的单词";从字符串

Php regexp";仅删除一个带字符的单词";从字符串,php,regex,Php,Regex,我有一个字符串,“你好,我有个问题” 我想从这个字符串中删除所有一个字符的单词。一定是“你好,我有问题” 我已经做到了: $yt_tags = preg_replace('/[\w]{1}/','',$yt_tags); 但它会删除字符串中的所有内容 谢谢你的帮助 使用单词边界(\b): 我在\s*中添加了“修剪”不必要的额外空白(wordaword否则会变成:wordword而不是wordword)。可能更快,但可能更复杂一些: $words = explode(' ', $input_st

我有一个字符串,“你好,我有个问题”

我想从这个字符串中删除所有一个字符的单词。一定是“你好,我有问题”

我已经做到了:

$yt_tags = preg_replace('/[\w]{1}/','',$yt_tags);
但它会删除字符串中的所有内容

谢谢你的帮助

使用单词边界(
\b
):


我在
\s*
中添加了“修剪”不必要的额外空白(
wordaword
否则会变成:
wordword
而不是
wordword
)。

可能更快,但可能更复杂一些:

$words = explode(' ', $input_string);
foreach($words as &$w)
{
    if(strlen($w) === 1)
    {
        unset($w);
    }
}

注意:假设每个单词之间只有一个字符间隔,情况可能并非如此。如果您知道这是不同的,例如它来自表单,请使用正则表达式。

简短回答,您应该使用
\b\w\b


正则表达式
[\w]{1}
匹配任何单词字符(字母、数字或下划线),但您希望在单词边界中获得匹配项。这是完全不同的事情

我们的测试字符串:
您好,有问题

你犯了什么错?

\w{1}
在任何地方查找任何单个单词字符:
he
l l l l e r e h a v e u e s t n

\w{2}
按顺序查找单词字符
他会在
上找到那些奇数长度的单词 错过了最后一个字母(
Hello-->他将

\w{3}
在任何地方查找单词字符三元组
Hel hav que sti

等等

我们需要什么?

\b..\b
在单词边界中查找匹配项

\w
查找单词字符 (数字、字母或下划线)

\b\w\b
查找一个长度的单词。这就是我们需要的

$words = explode(' ', $input_string);
foreach($words as &$w)
{
    if(strlen($w) === 1)
    {
        unset($w);
    }
}