Php-regexp”;只删除一个带字符的单词“;来自字符串


Php regexp "deleting only one charactered words" from string

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

我想从这个字符串中删除所有一个字符的单词。它看起来一定像"你好,有问题"

我已经做到了:

$yt_tags = preg_replace('/['w]{1}/','',$yt_tags);

但它会删除字符串中的所有内容。

谢谢你的帮助。

使用单词边界('b):

preg_replace('/'b'w'b's*/'...

我在's*中添加了"修剪"不需要的额外空白(否则word<space>a<space>word将变成:word<space><space>word而不是word<space>word)。

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

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

注意,这假设每个单词之间只有一个字符空间,但事实可能并非如此。如果您知道这是不同的,例如它来自一个表单,请使用regex。

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


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

我们的测试字符串:Hello there have question

你犯了什么错

'w{1}在任何位置查找任何单个单词字符:H e l l o t h e r e h a v e q u e s t i o n

'w{2}按顺序查找单词字符对:He ll th er ha ve qu es ti on注意奇数长度的单词遗漏最后一封信(Hello --> He ll

'w{3}在任何位置查找单词字符三元组Hel the hav que sti

等等。。。

我们需要什么

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

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

'b'w'b查找一个长度的单词。这正是我们所需要的。

HTH