正規表現
ちょっと正規表現について書いてみようと思います。
最近まで間違って使用していた事があって、
同じような間違いをしている人もいるかもしれません。
例えば下記のようなhtmlの一部があったとします。
<a href="./index.html"><strong>表示文字列</strong></a>
<a href="./index.html"><img src="./image/1.jpg"></a>
プログラムの場合を前提としてですが、
このような時、画像表示されない方のリンクURLを得たい場合、
今までは「<a href.*html">[^(<img)]」なんて書いてた訳ですが、
これは間違いなんですよね。
「<img」を()でグループ化して、「[^]」で否定して、
「<imgという文字列が無い」になると思ってましたが、
これは間違いのようです。
表現するのが難しいですが、「[^(<img)]」は
「<でもiでもmでもgでも(でも)でもない」となるようです。
従って、今回の場合「<a href.*html">[^(<img)]」では何も一致しません。
ではどう記述すれば良いか?
このように記述すれば画像表示されない方のリンクURLを取得出来ます。
「<a href.*html">(?!<img)」
(?!regexp)とは、括弧内にある正規表現が続かないことを表します。
よって、1から説明すると、
「<a hrefという文字列があって、何でも良い文字が続いて、
html">という文字列があって、それに<imgという文字列が続かない」
となります。(後方不一致)
これで画像表示されてない方のリンクURLに対し一致する事が出来ましたが、
まだタグの状態なので、後は関数使うなりして中のURLを取り出せばOKです。
因みに、
(?!regexp)は後方不一致ですが、
(?=regexp)は後方一致、(?<=pattern)は前方一致
(?<!pattern)は前方不一致となります。
・Windows:秀丸エディタ
・Macintosh:CotEditer
皆さんもがんばって下さい(笑)
- 作者: Jeffrey E.F. Friedl,株式会社ロングテール,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/04/26
- メディア: 大型本
- 購入: 24人 クリック: 754回
- この商品を含むブログ (86件) を見る