PHPで正規表現による文字列置換をおこなう場合、次の関数を使用する。

ereg_replaceはPHP 5.3.0より、非推奨の関数となった。ここではpreg_replaceをもちいたサンプルが紹介されている。

サンプルの動作環境は次のとおり。

  • OS: Mac OS X 10.6.3
  • PHP: 5.3.1

まずはシンプルなサンプルから

a_simple_example.php

<?php
$text= 'My name is Brian';
$pattern = '/My name is (Brian|Sam|Zach)/';
$replacement = '$1 is a pretty cool guy.';
echo preg_replace($pattern, $replacement, $text);
?>

これを実行すると「Brian is a pretty cool guy.」と表示される。

    % php ./a_simple_example.php
    Brian is a pretty cool guy.

パターン内($pattern)にはカッコとパイプを使ったグループが指定されている。この場合

  • My name is Brian
  • My name is Sam
  • My name is Zach

にマッチする。マッチした文字列は$replacementで置換される。このとき、n番目のパターンにマッチした文字列は$nに格納される。$replacementの$1にはBrianが格納され、結果「Brian is a pretty cool guy.」になるというわけだ。

Useful Regex Functions - URI/メールアドレスにアンカーをセット

次のlink_it関数では、テキスト中にURIやメールアドレスが含まれていた場合にアンカーをセットする。

link_it_1.php

<?php
function link_it($text)
{
    $text= preg_replace("/(^|[\n ])([\w]*?)((ht|f)tp(s)?:\/\/[\w]+[^ \,\"\n\r\t<]*)/is", "$1$2<a href=\"$3\" >$3</a>", $text);
    $text= preg_replace("/(^|[\n ])([\w]*?)((www|ftp)\.[^ \,\"\t\n\r<]*)/is", "$1$2<a href=\"http://$3\" >$3</a>", $text);
    $text= preg_replace("/(^|[\n ])([a-z0-9&\-_\.]+?)@([\w\-]+\.([\w\-\.]+)+)/i", "$1<a href=\"mailto:$2@$3\">$2@$3</a>", $text);
    return($text);
}
?>

「http:」「https:」「ftp:」「www.」などのURIやメールアドレスにマッチする。この関数を使用するサンプルファイルは次のとおり。

link_it_2.php

<?php
include_once('link_it_1.php');

$text = <<< EOF
FreeBSD開発チームは6月18日(世界協定時)、次期リリースのFreeBSD 8.1のリリース候補第1版を公開した。x86、AMD64のほかPowerPC、SPARC、IA64といったアーキテクチャに対応している。今後は、6月中に第2版のリリース候補版を公開し、7月初旬ごろにFreeBSD 8.1の正式リリースが予されている。

x86およびAMD64については、DVDイメージも用意されているが、現在のFTPのミラーリングシステムではファイルサイズが2GBを超えると配布できないため、一部のパッケージに関してはISOイメージに含まれていない。開発チームは「なるべく早急にこの制限を取り除きたいと考えているが、8.1の正式提供までには間に合いそうもない」としている。

イメージファイルのダウンロードは http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/mirrors-ftp.html から行える。FreeBSD 8.0または8.1-BETAのユーザであれば、

# freebsd-update upgrade -r 8.1-RC1

上記のようにfreebsd-updateコマンドを使ってアップデート可能。
EOF;
echo link_it($text);
?>

Webブラウザでlink_it_2.phpにアクセスする。

Webブラウザでlink_it_2.phpにアクセス。ヒアドキュメント中のURIにアンカーがセットされていることがわかる