68user's page 掲示板

Prev< No. 1767〜1772> Next  [最新発言に戻る] [過去ログ一覧]
No. 1767 # 68user 2001/03/01 (木) 01:02:25
おー、これってきっちりやると結構面倒かも。で、30分あれこれ
やった結果…これでどだ!
    $_='hoge<http://x68000.startshop.co.jp/~68user/><http://www2s.biglobe.ne.jp/~cru/library/>fuga';
    
    s/&/&amp;/g;
    s/\"/&quot;/g;
    s/</&lt;/g;
    s/>/&gt;/g;
    $http_pattern = '((http|https)://[a-zA-Z0-9\.\/\~\:\?\#\@\&\-\+\=;%_]+)';
    $out = '';
    while (1){
            if ( ! s!(.*?)($http_pattern)!! ){
                    $out .= $_;
                    last;
            }
            $out .= $1;
            $buf = $2;
            $buf =~ s/((&lt;|&gt;|&quot;).*)//;
            $rest = $1;
            $buf =~ s!$http_pattern!<A HREF="$1">$1</A>!;
            $out .= $buf;
            $_ = $rest . $_;
    }
    
    print "$out\n";
無限ループが恐いので (^^;、まだ wwwboard.cgi には組み込んでません。

No. 1768 # mm 2001/03/01 (木) 02:34:18
無茶苦茶効率悪そうだし、未定義変数使用の警告が出るけど…(^^;

    $_='hoge<http://x68000.startshop.co.jp/~68user/><http://www2s.biglobe.ne.jp/~cru/library/>fuga';
    $http_pattern = '(http|https)(://)(([a-zA-Z0-9\.\/\~\:\?\#\@\&\-\+\=;%_]+?)(&gt;|&lt;|&quot;)|([a-zA-Z0-9\.\/\~\:\?\#\@\&\-\+\=;%_]+))';
    s/&/&amp;/g;
    s/\"/&quot;/g;
    s/</&lt;/g;
    s/>/&gt;/g;
    s!$http_pattern!<A HREF="$1$2$4$6">$1$2$4$6</A>$5!g;

No. 1769 # CZ 2001/03/01 (木) 07:43:42
>>1767 68userさん
おはようございます。

> おー、これってきっちりやると結構面倒かも。

こんなに奥が深いものとは想像もつきませんでした。以前これに着手しかけて断念した覚えはあったのですが,なぜ断念したかは覚えていません。

> 無限ループが恐いので (^^;、まだ wwwboard.cgi には組み込んでません。

早速ruby文に変換して実働掲示板に使っています。無限ループになっても利用者が二人しかいないサーバだし,HTTPならすぐ切れそうだということで,心配はしていません。

そんなわけで,いつもありがとうございます。これからもお世話になります。

No. 1770 # 68user 2001/03/01 (木) 12:11:10
こんなのも。
    $_='hoge<http://x68000.startshop.co.jp/~68user/><http://www2s.biglobe.ne.jp/~cru/library/>fuga';
    $http_pattern = '((http|https)://[a-zA-Z0-9\.\/\~\:\?\#\@\&\-\+\=;%_]+)';
    s/&/&amp;/g;
    s/\"/&quot;/g;
    s/</&lt;/g;
    s/>/&gt;/g;
    @items = split(/(&lt;|&gt;|&quot;)/, $_);
    foreach (@items){
            s|$http_pattern|<A HREF="$1">$1</A>|g;
    }
    $_ = join('', @items);
    print "$_\n";
アルゴリズム・正規表現が複雑にならないという点で、これが
一番よさげかなぁ。でも動作チェックと速度計測をしなくては。

もっとよいのを思いついた方は教えてください。

No. 1771 # 68user 2001/03/01 (木) 23:48:26
>>1770 68user
commit しました。とか言ってみたり。
    http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/cgi-bin/wwwboard.cgi

No. 1772 # mm 2001/03/02 (金) 00:14:33
>>1770 68userさん
いいですねぇ。
これ頂きます。perl4でも動くし(^^;

Prev< No. 1767〜1772> Next  [最新発言に戻る] [過去ログ一覧]