2011-09-25 12 views
2

まず、タグからわからない場合は、PHPでこれをやっていますが、それはあまり問題にはならないでしょう。完全にすべてのHTMLタグと、事実上すべての特殊とアルファベット以外の文字を削除するようだ正規表現 - すべての英数字以外の文字を削除するCRLFの問題

$inputStr = strip_tags($inputStr); 
$inputStr = preg_replace("/[^a-zA-Z\s]/", " ", $inputStr); 

私はこのコードを持っています。 1つの問題は、なんらかの理由で、カラージュのリターン/改行(単に組み合わせ)を除外しないことです。

私はこの行を追加した場合:最後に

$inputStr = preg_replace("/\s+/", " ", $inputStr); 

を、しかし、それは素晴らしい作品。誰かが私に教えてもらえますか?

  1. なぜ最初のpreg_replaceフィルターがCR/LFから外れていませんか?
  2. この2番目のpreg_repalceは実際に何をしていますか?私は最初のものを大部分は理解していますが、第2のものは私を混乱させています - それは動作しますが、私は理由を知らない。
  3. 何とか1行にまとめることはできますか?

答えて

1

最初の正規表現では、文字または空白以外のすべての文字が削除されています。 CRLFは空白なので、除外されません。

もう1つは空白文字をスペース文字に置き換えています。基本的には、空白のシーケンスを単一のスペースに集約します(量指定子が貪欲であるため)。

\sを最初の正規表現から削除することをお勧めします。

+0

ありがとうございます。ある日、良い正規表現のチュートリアルと練習を読むのに十分な時間があります。私はその大いに必要と思う。私はそれを試してみて、後で知らせる。 –

+0

非常に高く評価されました。 –

2
  1. 文字と空白以外のすべてを削除するように指示しました。改行は空白なので、削除されません。 \sの代わりに\hを使用して、の水平の空白を除外することができます。
  2. 「1つまたは複数の空白文字(\s+)のすべてのシーケンスを単一のスペースで置き換える」という意味です。
  3. preg_replace("/[^A-Za-z]+/", " ", ...)する場合があります。このよう\nとして空白
1
  1. \s試合。
  2. すべての空白文字をスペースで置き換えています。
  3. あなたはそれを1つの読めない行にすることができますが、おそらく正規表現は1つではありません。
関連する問題