0

我有这条线

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

我想删除所有单字符和双字符单词(a、no、do 等...)。

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

xxxxx a b c d e xxxxx

然后我的代码会留下这样的东西(每两个匹配的单词都会被省略)

xxxxx b d xxxxx

我知道预赛看起来像“a”、“b”、“c”、“d”、“e”,那么有什么简单的方法可以解决这个问题吗?我想过复制每个空格,但也许有人会有更好的主意?

4

1 回答 1

3

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

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

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

您可以在此演示中看到它的工作原理。

于 2012-08-09T15:04:22.953 回答