URLの正規表現
‘|http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?|’
これだけ見ても、いまいちイメージがつかめないので、
独習PHPのサンプルファイル、
chap05の”preg_replace.php”を元に、
テスト用ファイルを作って、いろいろ試してみました。
“preg_replace_test.php”
<?php $url_preg = '|http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?|'; $url = "http://www.test.com/test"; print preg_replace($url_preg, '<a href="$0">$0</a>', $url);
preg_replace(string $pattern, string $str2, string $str1)
$str1の中から、$patternに当てはまる部分を、
$str2に置き換える関数。
このプログラムは、指定した文字列を、
上記の正規表現にマッチする部分を
リンクに置き換えて表示する。
つまり、リンクに置き換えられていればURLとして認められ、
置きかえられていなければURLと認識されていないことになる。
この$urlの文字列をいじって、
①全体がURLとして認識されない場合
②途中までURLとして認識される場合
2つのパターンをまとめました。
結果を書き始める前に、
1つ、この記事内で使う用語を定義しておきます。
○用語の定義
・指定記号:” “(スペース)、”?”、”%”、”&”、”=” の5つ
この5つの記号は、URLの中で使える記号。
ということで、1まとまりにして扱います。
※ただし、使える位置に制限あり。
その他にも、URL中で使える記号として、
“-“、”.”、”/” の3つがありますが、
使い方の制限や役割がそれぞれ独特なので、
個別に、”-“、”.”、”/”として扱います。
①URLとして認識されない場合
●”http://”または”https://”で始まっていない
例) htp://~、http:/~、httpss://~
●FQDNの部分に”.”が1つも入っていない
例) http://wwwtestcom/test
●最初の”.”までの間、またはその直後に”-“以外の記号が入ってる場合
例)
・http://ww?w.test.com/test
・http://www./test.com/test
※ http://ww-w.test.com/test や
http://www.-test.com/test はOK
②途中までURLとして認識される場合
●最初の”.”後2文字目以降に、”.”,”-“以外の記号が入っている場合
例) http://www.te?st.com/test
-> http://www.te までがURLと認識される
※”http://[FQDN]/”以降に、指定記号ならOK
例)
・http://www.te/st.c?om/test
-> 全てURLと認識される
・http://www.te/st.c@om/test
-> http://www.te/st.c まで
●”.”の直後に”/”が、または”.”が連続して入っている場合
例)
・http://www.test./com/test
-> http://www.test まで
・http://www.test..com/test
-> http://www.test まで
※上記同様、”http://[FQDN]/”以降ならOK
参考書籍:
新品価格 |