ここから本文です

正規表現でURLのマッチ(上級)

gs_********さん

2006/12/2009:40:05

正規表現でURLのマッチ(上級)

正規表現を使って変数内のURLをピックアップしようとしています。

$pattern = '#(^|[^\"\'=\]]{1})(http|HTTP|ftp)(s|S)?://([^\s<>\.]+)\.([^\s<>]+|.[^\.])#sm';

このパターンなのですが、ほとんどのケースでマッチしてくれます。しかし、URLにドットが複数並んで存在する場合、例えば http://www,yahoo........co.jp などという場合もマッチしてしまいます。上の正規表現を何とかして、ドットが繰り返され手いる場合はマッチしないようにしたいのですがそのようなことは可能でしょうか?

もし方法をご存知の方折られましたらどうぞよろしくお願いいたします。

補足補足です:
$pattern = '#(^|[^\"\'=\]]{1})(http|HTTP|ftp)(s|S)?://([^\s<>\.]+)\.{1}([^\s<>]+|.[^\.{1}])#sm';

と、¥.{1} としてもマッチしてしまいます。

閲覧数:
3,262
回答数:
3
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

kwi********さん

2006/12/2016:05:56

PHPの正規表現だったら、pregかeregかは書いてほしかったりするんですけどね。

$pattern = '#(^|[^\"\'=\]])(http|HTTP|ftp)(s|S)?://((([^\s<>\.]+)\.)+[^\s<>\.]+)#sm';

ではどうです?

<?php
print "1 : " ;
test1("http://.www.yahoo..co.jp/1");
print "2 : " ;
test1("http://www.yahoo.co.jp/2");
print "3 : " ;
test1('<a href="http://www.yahoo........co.jp" target="new">');
function test1($sTxt)
{
$pattern = '#(^|[^\"\'=\]])(http|HTTP|ftp)(s|S)?://((([^\s<>\.]+)\.)+[^\s<>\.]+)#sm';
preg_match($pattern, $sTxt, $matches);
print_r($matches);
print "\n";
}
?>

実行すると、こんな感じ:

1 : Array
(
)

2 : Array
(
[0] => http://www.yahoo.co.jp/2
[1] =>
[2] => http
[3] =>
[4] => www.yahoo.co.jp/2
[5] => co.
[6] => co
)

3 : Array
(
)

質問した人からのコメント

2006/12/22 13:16:31

成功 大変ありがとうございました。助かりました。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

tkk********さん

2006/12/2014:25:17

perlですが参考になると思います。

http://www.din.or.jp/~ohzaki/perl.htm#httpURL

zen********さん

2006/12/2012:33:19

試していませんが、『\.』の記述の所を『\.{1}』にすればどうでしょうか?

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる