[Perl]http URL の正規表現について

コメント内のURLを自動的にリンクする処理の正規表現が、よく見るとかなり怪しかったの少し調べてみたのですが、それほど正確でなくてもいいと言うのであれば、

s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+

で良いみたいです。

なので、PerlでURLを自動的にリンクする処理は以下のような感じになります。

my $pattern = "s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+";
$text =~ s/($pattern)/<a href="$1">$1<\/a>/g;

ちなみに、正確なhttp URL の正規表現はこうらしい。

my $digit = q{[0-9]};
my $upalpha = q{[A-Z]};
my $lowalpha = q{[a-z]};
my $alpha = qq{(?:$lowalpha|$upalpha)};
my $alphanum = qq{(?:$alpha|$digit)};
my $hex = qq{(?:$digit|[A-Fa-f])};
my $escaped = qq{%$hex$hex};
my $mark = q{[-_.!~*'()]};
my $unreserved = qq{(?:$alphanum|$mark)};
my $reserved = q{[;/?:@&=+$,]};
my $uric = qq{(?:$reserved|$unreserved|$escaped)};
my $query = qq{$uric*};
my $pchar = qq{(?:$unreserved|$escaped|} . q{[:@&=+$,])};
my $param = qq{$pchar*};
my $segment = qq{$pchar*(?:;$param)*};
my $path_segments = qq{$segment(?:/$segment)*};
my $abs_path = qq{/$path_segments};
my $port = qq{$digit*};
my $IPv4address = qq{$digit+\\.$digit+\\.$digit+\\.$digit+};
my $toplabel = qq{(?:$alpha|$alpha(?:$alphanum|-)*$alphanum)};
my $domainlabel = qq{(?:$alphanum|$alphanum(?:$alphanum|-)*$alphanum)};
my $hostname = qq{(?:$domainlabel\\.)*$toplabel\\.?};
my $host = qq{(?:$hostname|$IPv4address)};
my $http_URL = qq{http://$host(?::$port)?(?:$abs_path(?:\\?$query)?)?};
my $pattern = $http_URL;

ぐはっ!

http://www.din.or.jp/~ohzaki/perl.htm#httpURL
[1792] Posted by kagahiro at 2010/03/22 14:48:13
オープン | 0 point | Link (2) | Trackback (0) | Comment (0)

キーワード
Perl URL 正規表現 http 自動リンク 

kagahiroのホームページ


[Perl]http URL の正規表現について 関連リンク

Perl(パール)
Perl(パール)とは、Larry Wall氏によって開発された、テキストの検索や抽出やレポート作成に適した、C言語に似た表記法のスクリプトプログラミング言語で、テキスト処理に優れていることから、CGIとしてWebアプリケ...
YouTube動画のURLを正規表現で埋め込みコードに変換するためのPerlコード
掲示板などのスレッドやコメント欄に投稿されたYouTube動画のURLを埋め込みコードに変換する方法を、ネットで検索していろいろ調べましたが、YouTube動画のURLは、http://www.youtube.com/watch?v={VID}とhttp://you...

[Perl]http URL の正規表現について トラックバック

トラックバックURL :


[Perl]http URL の正規表現についてへのコメント


詳細の入力フィールドを表示する

おすすめ  (チェックしてコメントすると最新情報に掲載)
コメント :

< 前の投稿      次の投稿 >

アクセスランキング

今日のアクセスランキング TOP 10

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (94 PV)
  2. フリーソフトウェア/オープンソースのタブー (19 PV)
  3. [将棋]竜王戦第三局は居飛車振り飛車の対抗型で丸山忠久九段が勝利 #竜王戦 (14 PV)
  4. グーグルニュース(Google News)日本語版が見れるURL (13 PV)
  5. リネージュ攻城戦情報(Arcturus) (12 PV)
  6. [食べ物]七草粥(ななくさがゆ) (11 PV)
  7. Google News (グーグルニュース)日本版 (11 PV)
  8. [C言語]UTF-8でエンコードされた文字列の部分文字列を取り出すコード (5 PV)
  9. [将棋]将棋実況ユーチューバーのクロノさんが朝日新聞のクレームで棋譜中継を配信中止 (5 PV)
  10. [Perl]UTF-8でエンコードされた文字列の文字数を取得するコード (5 PV)

今月のアクセスランキング TOP 10

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (2719 PV)
  2. グーグルニュース(Google News)日本語版が見れるURL (701 PV)
  3. フリーソフトウェア/オープンソースのタブー (467 PV)
  4. [食べ物]七草粥(ななくさがゆ) (453 PV)
  5. [将棋]竜王戦第三局は居飛車振り飛車の対抗型で丸山忠久九段が勝利 #竜王戦 (440 PV)
  6. Google News (グーグルニュース)日本版 (420 PV)
  7. [将棋]将棋実況ユーチューバーのクロノさんが朝日新聞のクレームで棋譜中継を配信中止 (210 PV)
  8. グーグルニュース(Google News)のRSS/atomが取得できない (171 PV)
  9. USTREAM(ユーストリーム) 日本語版 無料のライブ映像配信サービス (150 PV)
  10. [Perl]UTF-8でエンコードされた文字列の文字数を取得するコード (126 PV)

アクセス統計

ディレクトリ

関連サイト