++Diary++

2002年01月28日の日記

Perlの正規表現のこと
Perlを勉強しはじめたばかりのころ、正規表現については苦手で、避けて通っていた。
だがProgramming Perlの「Pattern Matching」を読んでからというもの、今ではPerlでも一番面白いところだと思えるようになった。
とは言うものの、英語と一緒で読むのは簡単でもいざ自分で書こうとなると、なかなか難しいのではないかと思う。
それですごくくだらないものなのだが、Perlの正規表現の練習用(または自分が書いた正規表現の確認用)のスクリプトを作ってみた。
こちらです。
たとえばPattern for matchingに
(?:(?<=[^"=>])|^)(http:\/\/[\w.~\-\/?&+=#]+)
と記入した場合、String for matchingに
http://www.t-okada.com/cgi/
を入れると「Good!」になりますが
http://www.t-okada.com/cgi/
または
<A HREF="http://www.t-okada.com/cgi/">
を入れると「Didn't Match!」になります。
これはいわゆるオートリンクのための正規表現のつもりです。Aタグを使った場合以外にのみURLがオートリンクされると思いますが、間違いがありましたらどうぞご指摘下さいませ。

なお上記ですが
(?:(?<=[^"=])|^)(http:\/\/[\w.~\-\/?&+=#]+)
にすると
http://www.t-okada.com/cgi/
にはマッチしてしまいます。

※このスクリプトは(こんなもの実際に使う人いないかもしれませんが、)誰でも入力出来るような形で公開すると、もしかしてとんでもないことになるかもしれないので、もしも使うのならローカルで使用して下さいね。

追記:
そう言えばオートリンクの正規表現については前にもこの日記で書いた覚えがあり、同じ事ばかり言っていてすみません。
ところで上記の正規表現ちょっと直しました。文字クラスの中では\はいらないのでこれも取ってみましたが、-の前の\を取るとなぜかエラーに。文字クラスの中では-は特別な意味があることを忘れていました。
2002年01月28日(月)   No.14

この記事へのコメント

この記事へのコメントは以下のフォームからどうぞ
Name
E-Mail
URL
感想
(1000文字まで)
Pass

No. PASS
 OR AND
スペースで区切って複数指定可能
<<  2002年01月 >>
  12345
6789101112
13141516171819
20212223242526
2728293031  

2002年01月28日(月)
Perlの正規表現の..

++HOME++

[Admin] [TOP]
shiromuku(fs4)DIARY version 4.00