Php正则表达式“从字符串中只删除一个字符”

时间:2012-01-30 16:15:22

标签: php regex

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

我想删除此字符串中的所有字符。它必须看起来像“你好有问题”

我做到了这一点:

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

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

感谢您的帮助。

3 个答案:

答案 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