preg_replace删除单/双字符单词

时间:2012-08-09 15:01:58

标签: php regex preg-replace

我有这条线

$txt=preg_replace('#\s(\S){1,2}\s#',' ',$txt);

我想删除所有单字和双字字(a,no,do etc ......)。

它有效,但并不完美 - 当我的字符串看起来像那样:

xxxxx a b c d e xxxxx

然后我的代码留下这样的东西(每隔一个匹配的单词,被省略)

xxxxx b d xxxxx

我知道preg match看起来像“a”,“b”,“c”,“d”,“e”,所以有什么简单的方法可以解决这个问题吗?我想过重复每一个空白,但也许有人会有更好的想法?

1 个答案:

答案 0 :(得分:3)

在重复的片段周围添加重复的非捕获组,如下所示:

$txt = preg_replace('#(?:\s+\S{1,2})+\s+#',' ',$txt);

我还删除了\S周围不必要的捕获组,因为您不使用或不需要它,并且在重复时无法正确捕获。

您可以在this demo中看到它。