我有一个字符串,“你好,我有一个问题”
我想删除此字符串中的所有字符。它必须看起来像“你好有问题”
我做到了这一点:
$yt_tags = preg_replace('/[\w]{1}/','',$yt_tags);
但它会删除字符串中的所有内容。
感谢您的帮助。
答案 0 :(得分:8)
使用字边界(\b
):
preg_replace('/\b\w\b\s*/'...
我在\s*
中添加了'修剪'不需要的额外空格(否则word<space>a<space>word
会变为:word<space><space>word
而不是word<space>word
)。
答案 1 :(得分:0)
可能更快,但更复杂一点:
$words = explode(' ', $input_string);
foreach($words as &$w)
{
if(strlen($w) === 1)
{
unset($w);
}
}
请注意,假设每个单词之间只有一个字符空格,可能不是这种情况。如果您知道这种情况各不相同,它来自一个表单,使用正则表达式。
答案 2 :(得分:0)
简短回答,您应该使用 \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