我有一个字符串,"你好,我有个问题"
我想从这个字符串中删除所有一个字符的单词。它看起来一定像"你好,有问题"
我已经做到了:
$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