2

次の入力が与えられた場合 -

"I went to 1 ' and didn't see p"

、出力が次のようになるように、すべての単一文字 (および残りのスペース) を削除する PHP の preg_replace 関数の正規表現は何ですか?

"went to and didn't see".

これに対する解決策を探していますが、見つかりません。同様の例には正規表現の説明が含まれていないため、問題に適応させることができませんでした。そのため、これを行う方法を知っている場合は、正規表現を提供するだけでなく、それがどのように機能するかを理解できるように分解してください.

乾杯

4

4 に答える 4

4

これを試して:

$output = trim(preg_replace("/(^|\s+)(\S(\s+|$))+/", " ", $input));
  • (^|\s+)「文字列またはスペースの始まり」を意味します
  • (\s+|$)「スペース文字列の終わり」を意味します
  • \S単一の非スペース文字です
于 2012-06-25T11:46:14.707 に答える
0

の助けを借りて試してみてくださいimplodeexplodeそしてarray_filter

$str ="I went to 1 ' and didn't see p";
$arr = explode(' ',$str);
function singleWord($var)
{
  if(1 !== strlen($var))
  return $var;
}
$final = array_filter($arr,'singleWord');

echo implode(' ',$final);
//return "went to and didn't see"(length=19)
于 2012-06-25T11:52:06.727 に答える
0

この正規表現を試してください

'\s+\S\s+' -> ' '
于 2012-06-25T11:44:54.450 に答える
0

2つのパスが必要です

1つ目は、すべての単一文字を取り除くことです

(?<=^| ).(?=$| ) replace with empty string

2つ目は、単一のスペースのみを残すことです

[ ]{2,} replace with single space

先頭または末尾にスペースが含まれている可能性のある文字列になります。正規表現でそれを行うのではなく、あなたの言語でこれをトリミングするだけです

例として、最初の正規表現はphpのように書かれています

$result = preg_replace('/(?<=^| ).(?=$| )/sm', '', $subject);
于 2012-06-25T11:47:10.490 に答える