7

単一の文字や数字だけでなく、文字列からすべての単一文字を削除するには、正規表現が必要です

文字列は次のとおりです。

「未来のフォートカジノ空手チョップ(メトロで生産)」

次のように表示されます。

「FutureFtCasinoKarate ChopProdByMetro」

私が現在使用している式(PHPの場合)は、単一の「A」を正しく削除しますが、単一の「(」および「)」を残します

これは私が使用しているコードです:

$string = preg_replace('/\b\w\b\s?/', '', $string); 
4

2 に答える 2

14

これを試して:

(^| ).( |$)

壊す:

   1.  (^| )  ->  Beginning of line or space  
   2.  .      ->  Any character  
   3.  ( |$)  ->  Space or End of line

実際のコード:

$string = preg_replace('/(^| ).( |$)/', '$1', $string); 

注:私はPHP正規表現の動作に精通していないため、実際の正規表現の宣言方法によっては、コードを微調整する必要がある場合があります。

m.buettnerが指摘したように、このコードには末尾の空白があります。それをクリアするにはトリムが必要になります。

a b c編集:Arnis Juragaは、これでは複数の単一文字がフィルターで除外されないことを指摘しましたb。これが問題である場合は、次の正規表現を使用してください。

(^| ).(( ).)*( |$)

中央(( ).)*に追加された文字は、0回以上続く任意のスペースを探します。欠点は、一連の単一文字が配置されていた場所に2つのスペースができてしまうことです。

これを意味する:

The a b c dog

これになります:

The  dog

置換を実行して単一の個別の文字を取得した後、次の正規表現を使用して二重スペースを見つけ、次に単一スペースに置換する必要があります。

( ){2}
于 2012-11-08T23:59:39.703 に答える
6

キャプチャを必要としないもう少し効率的なバージョンは、ルックアラウンドを使用することです。複数の負のロジックがあるため、直感的ではありません。

$string = preg_replace('/(?<!\S).(?!\S)\s*/', '', $input);

これにより、空白以外の文字の前後にない文字がすべて削除されます(したがって、空白の間または文字列の境界にある文字のみ)。また、前の空白がある場合はそれだけを残すために、試合の末尾の空白もすべて含まれます。注意点は、ニックの答えと同じように、文字列の最後にある空白が末尾の空白を残すことです(文字の前にあるため)。これは、文字列を結合することで簡単に解決できます。)trim

于 2012-11-09T00:11:57.000 に答える