[PHP-users 1349] Re: URLのリンク変換について(正規表現)

Seto php-users@php.gr.jp
Wed, 22 Aug 2001 01:46:58 +0900


 Setoです。

>先ほどの質問の続きなのですが下記のようなプログラムまでは出来ているのですがど
>うしてもディレクトリーがあるとhttp://www.nifty.comがあるURLを_blankなしの置
>換ができなくなります。
>
私もPHP正規表現関数は苦手なので トライしてみました。
ただURLの文字列パターンの想定をきちんとしてないので
その辺は不確かです。
メールだと改行されてスペースが欠落しているように見えたので、
意図的にソースを改行させてもらいました。

逆に質問です。最初に $com に設定されている
&\"<>\\',.
は、何を意味するのですか?

<?
$com = "http://www.nifty.com/intel/intel.html\nhttp:".
       "//www.yahoo.co.jp\nあいうえお\n&\"<>\\',.";
print "<html><body>";
$com = htmlspecialchars($com);
$com = stripslashes($com);

$comsave = $com;
$com =
 ereg_replace("(https?|ftp|news)".
              "(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)",
              "<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>",$com);
//
//$com = ereg_replace("<a href=\"([http://www.nifty.com]+[/]*)".
//        "([[:alnum:]*]*[[/\.]*]*[[:alnum:]*]*)".
この正規表現って変じゃないですか?

//        "\" target=\"_blank\">([http://www.nifty.com]+[/]*)".
//        "([[:alnum:]*]*[[/\.]*]*[[:alnum:]*]*)</a>",
//        "<a href=\"\\1\\2\">\\1\\2</a>",$com);
不要なパターンは入れないほうがすっきりして見やすいと思います。

if ($com != $comsave) {
  $com =
   ereg_replace("(://www.nifty.com[/]*)".
                "([[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]*)\"".
                "( target=\"_blank\">)","\\1\\2\">",$com);
}
$com = ereg_replace("([#-9A-~]+)(@[#-9A-~]+)",
       "<a href=\"mailto:\\1\\2\">\\1\\2</a>",$com);

//$com = str_replace( "\r\n",  "\r", $com);
//$com = str_replace( "\r",  "\n", $com);
//$com = nl2br ("$com");
//$com = ereg_replace( "\n",  "", $com);
$com = nl2br($com);
$com = ereg_replace("[\n,\r]","",$com);
echo "$com";
print "</body></html>";
?>


****************
 Junya Seto
 seto@cii.gr.jp
****************