正規表現でURLをリンクに変換する

(1/3)
掲示板やブログで、"http://~" ではじまる文字列を自動的にハイパーリンクに変換してくれるところが多い。これを PHP で実装しようとする際、正規表現が威力を発揮する。

URLで使える文字

URL を正規表現で表す前に、URL で使えるすべての文字の種類を把握しておく必要がある。
URL の書き方は、RFC 1738 Uniform Resource Locators (URL)和訳】に定義されている。これによると、
"http(s)://" 以降に記述できる文字は、英数字(大文字・小文字)と記号類(- _ . ! ~ * ' ( ) ; / ? : @ & = + $ , % #)であることがわかる。
space
これを正規表現で表すと、
(https?:¥/¥/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)
となる。順に説明していこう。

今回使った正規表現

?
直前1文字の0または1回の繰り返し。
ここでは、http, https の両方にマッチする。
[ ]
文字クラス。 この中に記述された文字の並びのうちの1文字を表す。
-
文字の範囲指定。
a-z はアルファベット小文字すべてに、A-Z はアルファベット大文字すべてに、0-9 は数字すべてにマッチする。
+
直線1文字の1回以上の繰り返し。 ここでは、文字クラス[...]に記述された文字、いずれかの1回以上の繰り返し――すなわち、URL 文字列にマッチすることになる。
( )
サブパターン。 マッチングだけであれば不要だが、置換を行うために、マッチした部分文字列に番号を付けてやる必要がある。その場合にサブパターンを用いる。
この正規表現を使ったサンプル・プログラムを次のページに掲載する。
この項つづく
header