PCRE 6.6 + preg 系関数で正規表現に Unicode スクリプトを使う

portsnap してみたら PCRE がバージョン 6.6 になっていたので、変更点は何だろうと思い ChangeLog を読んでみたところ 6.5 のバグフィクス的な位置づけのよう。続いて 6.5 の新機能を見ると、

18. Changes to the handling of Unicode character properties:
(a) Updated the table to Unicode 4.1.0.
(snip)
(d) Added support for Unicode script names via properties such as \p{Han}.

と、Unicode スクリプト名が使えるようになっていたので、さっそく PHP で試してみました。
まずは PCRE をインストール。

PREFIX="$HOME/Applications/php51-pcre66"
./configure --prefix="$PREFIX" --enable-utf8 --enable-unicode-properties
make
make install

続いて PHP 5.1.2 を最小限のオプションで。

PREFIX="$HOME/Applications/php51-pcre66"
./configure --prefix="$PREFIX" --disable-all --without-all \
 --disable-cgi --enable-cli --with-pcre-regex="$PREFIX"
make
make install

これで準備完了。pcre-6.6/ucp.h を参考にあてずっぽうで正規表現を書いてテスト。
(とりあえず書いてあったもの全部を使ってますが、通常の和文+欧文のテキストではここまでやる必要は皆無です)

cat /tmp/pcre66test.php
<?php
$pattern = '/(\\p{Arabic}+|\\p{Armenian}+|\\p{Bengali}+|\\p{Bopomofo}+|\\p{Braille}+
    |\\p{Buginese}+|\\p{Buhid}+|\\p{Canadian_Aboriginal}+|\\p{Cherokee}+|\\p{Common}+
    |\\p{Coptic}+|\\p{Cypriot}+|\\p{Cyrillic}+|\\p{Deseret}+|\\p{Devanagari}+
    |\\p{Ethiopic}+|\\p{Georgian}+|\\p{Glagolitic}+|\\p{Gothic}+|\\p{Greek}+
    |\\p{Gujarati}+|\\p{Gurmukhi}+|\\p{Han}+|\\p{Hangul}+|\\p{Hanunoo}+|\\p{Hebrew}+
    |\\p{Hiragana}+|\\p{Inherited}+|\\p{Kannada}+|\\p{Katakana}+|\\p{Kharoshthi}+
    |\\p{Khmer}+|\\p{Lao}+|\\p{Latin}+|\\p{Limbu}+|\\p{Linear_B}+|\\p{Malayalam}+
    |\\p{Mongolian}+|\\p{Myanmar}+|\\p{New_Tai_Lue}+|\\p{Ogham}+|\\p{Old_Italic}+
    |\\p{Old_Persian}+|\\p{Oriya}+|\\p{Osmanya}+|\\p{Runic}+|\\p{Shavian}+
    |\\p{Sinhala}+|\\p{Syloti_Nagri}+|\\p{Syriac}+|\\p{Tagalog}+|\\p{Tagbanwa}+
    |\\p{Tai_Le}+|\\p{Tamil}+|\\p{Telugu}+|\\p{Thaana}+|\\p{Thai}+|\\p{Tibetan}+
    |\\p{Tifinagh}+|\\p{Ugaritic}+|\\p{Yi}+)/ux';
$subject = 'PCRE 6.6 - 漢字かなカナ交じりの文章';
$limit = -1;
$flags = PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY;

if ($words = preg_split($pattern, $subject, $limit, $flags)) {
    print_r($words);
}
?>

現状の PHP デフォルトでは

php /tmp/pcre66test.php

Warning: preg_split(): Compilation failed: unknown property name after \P or \p at offset 10 in /tmp/pcre66test.php on line 18

とエラーが出るけど、PCRE 6.6 をリンクした PHP では

~/Applications/php51-pcre66/bin/php /tmp/pcre66test.php
Array
(
    [0] => PCRE
    [1] =>  6.6 - 
    [2] => 漢字
    [3] => かな
    [4] => カナ
    [5] => 交
    [6] => じりの
    [7] => 文章
)

と、期待通りに文字種で分かち書きされました。
Unicode スクリプトが使えると正規表現がとても楽になるので、次のバージョン (5.1.3/4.4.3) ではぜひ PCRE 6.6 をバンドルしてほしいものです。
そして、PCRE には将来のバージョンで Unicode ブロックのサポートを期待したいですね。