[PHP] URLの正規表現

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

参考書籍:

独習PHP 第3版

新品価格
¥3,456から
(2018/1/14 17:05時点)

カテゴリーphp

コメントを残す

メールアドレスが公開されることはありません。