5

正規表現でうまくいくかもしれないと思いますが、機能するものを思いつくことができませんでした。PHP にはかなり長い文字列があり、クリーンアップする必要があります。場合によって は、単一のスペース文字の代わりに表示され、他のケース   (など) で表示されます。単一の出現をすべてスペースに置き換えたいのです が、意図を維持できるように他のものはそのままにしておきます。

何かご意見は?ここで正規表現を使用できると思いますが、しばらくの間、正規表現を作成するのに苦労していました!

4

2 に答える 2

1

一致する明示的な正規表現を使用し、置換を(match 1 space match 2)(not- ) (not- )として追加します。として明示的$1 $2にコーディングする必要がある場合があります。not- ([^;]|[^p];|[^s]p;|[^b]sp;|[^n]bsp;|[^&]nbsp;)

編集: [否定的な] ルックアラウンドは有用かもしれませんが (そして確かにコード全体が少なくなります)、各アプローチの速度を測定することをお勧めします。ルックアラウンドの速度について直接話すことはできませんが、正規表現の特定のメカニズムは、他のメカニズムに比べて非常に遅いことがわかりました。速度が問題になる場合は、正規表現をスキップしてstrpossubstring操作とテストの組み合わせを使用できます。これは、作成するのが面倒であっても、正規表現よりもはるかに高速であることがよくあります。これは、探している非常に明示的な文字列がある場合にのみお勧めします。文字列が明確でない場合は、正規表現が間違いなく適しています。

このインスタンス (疑似コード) の場合、文字列strpos検索は単純でstrpos($mystring, " ")、一致が見つかったら を呼び出しますstrpos($mystring, "  ")。2 つのindex呼び出しが同じ値を返す場合は、この置換をスキップして、インデックス ポイントの後の文字列を検索できます (1 回の 検索は の後indexDoubleFound + 12に開始しますが、2回の 検索は の後indexDoubleFound + 6に開始して、見逃さないようにし、意図せずに取得しないようにします)。交換)。

于 2013-07-19T17:48:56.790 に答える