PHPで正規表現による文字列置換をおこなう場合、次の関数を使用する。
- POSIX準拠のereg_replace
- Perl互換のpreg_replace
- マルチバイトに対応したereg - mb_ereg_replace
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にアクセスする。