我有这条线
$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”,所以有什么简单的方法可以解决这个问题吗?我想过重复每一个空白,但也许有人会有更好的想法?
答案 0 :(得分:3)
在重复的片段周围添加重复的非捕获组,如下所示:
$txt = preg_replace('#(?:\s+\S{1,2})+\s+#',' ',$txt);
我还删除了\S
周围不必要的捕获组,因为您不使用或不需要它,并且在重复时无法正确捕获。
您可以在this demo中看到它。