0

私はこの行を持っています

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

これは、すべての1文字と2文字の単語(a、no、doなど)を削除したかったものです。

それは機能しますが、完全ではありません-私がそのような文字列を持っているとき:

xxxxx a b c d e xxxxx

次に、私のコードは次のようなものを残します(一致する2番目の単語はすべて省略されます)

xxxxx b d xxxxx

preg matchは、「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 に答える