プロフィール

島田圭二

Author:島田圭二
Follow shimanp on Twitter

カレンダー
10 | 2017/03 | 11
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -
読断と変見内検索
訪問ありがとうございます
最近のコメント
最近のトラックバック
関連リンク
カテゴリー
月別アーカイブ


スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | 【--------(--) --:--:--】 | Trackback(-) | Comments(-)
phpの正規表現 - HTMLタグを消去するメモ

やりたいこと


PHPで取得したHTMLのタグを全て消して、文章のみ取得したかった。

でどうやる?


正規表現を使ってやるのがよさそうだ。

やってみた


preg_replace('/<("[^"]*"|\'[^\']*\'|[^\'">])*>/','',$html);

いろいろググったり試したりしてみたらこれが良さげだ。
ちなみにPHPには正規表現で置換する関数が二つあり、ereg_replaceとpreg_replaceがあるようだ。
ereg_replaceはPHP本来のものでpreg_replaceはperl互換のものらしい。
で、preg_replaceのほうがperlの強力な正規表現が使えなおかつ、高速らしい。

でこの正規表現どういう意味?


/<("[^"]*"|\'[^\']*\'|[^\'">])*>/

説明する自信が実はない・・・がとりあえずやってみる。
1.スラッシュで囲んでるけど何?
まず、始めと最後を/で囲まれているのは、Perlの正規表現の決まりごと。
/で囲まれたパターンに一致するものを置換する。
ちなみに後ろの/の後にオプションをつけることもできる。がここでは語らない。

2.スラッシュの後に<がくるけど?そして最後も>だけど?
HTMLのタグは<>で囲まれたところなので、<で始まり>で終わるようにしている

3.("[^"]*"|\'[^\']*\'|[^\'">])って括弧で囲まれているが何?
まず()で囲まれている部分はグループになる。
()内の文字列で一つのパターンをあらわす。()の後に*がついているが、
これは()内のパターンにマッチした文字列を0回以上という意味になる。

4.括弧内はどんな意味?
まずよく見ると文字列内に「|」がいくつかある。
これはOR(または)の意味で、前のパターンまたは後ろのパターンという感じになる。
なのでとりあえず「|」で区切ってみると、
"[^"]*"

\'[^\']*\'

[^\'">]

の3つのパターンがあることがわかる。
これらのどれかにあてはまれば()内のグループパターンはマッチすることになる。
では上から順にどういう意味か見ていく
"[^"]*"

これは"で始まり、"で終わるというパターンをあらわしている。
""の間に入る文字列は"以外であればOKである。[^"]というのは"以外という意味。
で*があるので"以外の文字列が1文字以上ということになる。


\'[^\']*\'

これも上の"のパターンを'に置き換えただけ。シングルクォーテーションの前に\があるのは、
'をエスケープするため。

最後
[^\'">]

'、"、>の3つ以外の文字列をあらわす

以上説明おしまい。

補足
てかPHPにはHTMLタグを除去する関数がすでにある。。。
それはstrip_tagsという関数である。

さらに補足
scriptタグだけうまく消えなかったので、このタグだけ別の正規表現で消して見た。
/).|\n)*<\/script>/

どういう意味かは面倒なので省く

さらにさらに補足
PHPの正規表現のチェックをしてくれる便利なサイト↓
PHP正規表現チェッカー
スポンサーサイト


php | 【2009-01-18(Sun) 16:39:12】 | Trackback:(0) | Comments:(0)
コメントの投稿
管理者にだけ表示を許可する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。