[Perl][正規表現][NoEditor(鬼車)] alt 指定のないimg タグを洗い出す方法
こんにちは、harupiyo です。
正規表現を書く時に、中にalt を含まないimg タグを探すにはどうしたらよいのだろう?と思って調べてみました。
Perl の場合と、正規表現ライブラリ"鬼車" を使っているNoEditor の場合で試してみています。
- 作者: Jeffrey E.F. Friedl,株式会社ロングテール,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/04/26
- メディア: 大型本
- 購入: 24人 クリック: 754回
- この商品を含むブログ (82件) を見る
正規表現のパターンの中に、(?!alt)と記述すると、altを含まない場合という指定ができます。
Perl の場合
#!/usr/bin/perl # 検索対象文字列 $str = <<EOF; <img src="test.jpg"><img src="test2.jpg" alt="hello"><img src="test3.jpg"> <img src="test.jpg" alt=""> <img src="test.jpg" alt="test"> <img src="test.jpg" ALT="test"> EOF $regexp = qr/ ( <img (?! # 先読み条件指定開始, [^>]* # > 以外の文字が続いて, alt=" # alt=" が来て [^"] # すぐに" で閉じるのでない場合 ) # はマッチ対象から除外する [^>]* # 除外しない場合は、<img のあとに続く > # > までの間の文字を ) # $1 に保存する /ix; # Option: i ... 大文字小文字を区別しない # : x ... 正規表現中に# でのコメントをゆるす # 上の正規表現は、こう一行で書いたのと同じです(どちらでも動きます) $regexp = qr/(<img(?![^>]*alt="[^"])[^>]*>)/ix; # マッチするパターンを全て表示(洗い出し) while( $str =~ m/$regexp/g ){ print $1 . "\n"; } __END__ 実行結果: <img src="test.jpg"> <img src="test3.jpg"> <img src="test.jpg" alt="">