[PHP-dev 848]Re: php-4.3.3RC3+libmbfl+onigurumaテスト版

Seiji Masugata s.masugata @ digicom.dnp.co.jp
2003年 8月 16日 (土) 13:51:06 JST


桝形です。

スクリプトと結果も記述しているので、長文失礼致します。

> 鬼車では、正規表現の構文を複数サポートしています。
> php_mbregexで使用しているデフォルトの正規表現構文はRubyのものですが、
> mb_regex_set_options()で変更でき、以下のようになっています。
> 
> 'j': REG_SYNTAX_JAVA
> 'u': REG_SYNTAX_GNU_REGEX
> 'g': REG_SYNTAX_GREP
> 'c': REG_SYNTAX_EMACS
> 'r': REG_SYNTAX_RUBY (default)
> 'z': REG_SYNTAX_PERL
> 'b': REG_SYNTAX_POSIX_BASIC
> 'd': REG_SYNTAX_POSIX_EXTENDED
> 
> 例えば、以下のようにすると以前の動作に近くなるのではないでしょうか?
> 
> <?php
>  mb_regex_set_options('d'); // default: 'r'
>  echo mb_ereg_replace( "[ -/:-@[-`{-~]", "", "hoge[-]hoge" );
>  echo mb_ereg_replace( "[ -/:-@\\[-`{-~]", "", "hoge[-]hoge" );
> ?>

確かに'd'で上記はクリアはできたのですが、別の問題があり、'\D'
等の省略形の指定で動作が異なります。

<?
// j: REG_SYNTAX_JAVA
// u: REG_SYNTAX_GNU_REGEX
// g: REG_SYNTAX_GREP
// c: REG_SYNTAX_EMACS
// r: REG_SYNTAX_RUBY (default)
// z: REG_SYNTAX_PERL
// b: REG_SYNTAX_POSIX_BASIC
// d: REG_SYNTAX_POSIX_EXTENDED

$Array = array( "j", "u", "g", "c", "r", "z", "b", "d" );

echo "<pre>";

foreach( $Array as $Value )
{
 mb_regex_set_options( $Value );

 echo "----------------------------------------------------------\n";
 echo "mb_regex_set_options[".$Value."]\n";
 echo mb_ereg_replace( "[ -/:-@[-`{-~]", "", "hoge[ふが - ふが]hoge" )."\n";
 echo mb_ereg_replace( "[ -/:-@\[-`{-~]", "", "hoge[ふが - ふが]hoge" )."\n";

 echo mb_ereg_replace( "\\D", "", date( "現在日時\nY-m-d H:i:s" ) )."\n";
 echo mb_ereg_replace( "[^0-9]", "", date( "現在日時\nY-m-d H:i:s" ) )."\n";

}

echo "----------------------------------------------------------\n";

echo "</pre>";
?>

結果、
---------------------

----------------------------------------------------------
mb_regex_set_options[j]

Warning:  mb_ereg_replace(): mbregex compile err: premature end of char-class in /XXXX/XXX/XXX/XXX/XXX/test.php on line 21

hogeふがふがhoge
20030816131127
20030816131127
----------------------------------------------------------
mb_regex_set_options[u]
hogeふがふがhoge
hogeふがふがhoge
20030816131127
20030816131127
----------------------------------------------------------
mb_regex_set_options[g]
hogeふがふがhoge
hogeふがふがhoge
現在日時
2003-08-16 13:11:27

20030816131127
----------------------------------------------------------
mb_regex_set_options[c]
hogeふがふがhoge
hogeふがふがhoge
現在日時
2003-08-16 13:11:27
20030816131127
----------------------------------------------------------
mb_regex_set_options[r]

Warning:  mb_ereg_replace(): mbregex compile err: premature end of char-class in /XXXX/XXX/XXX/XXX/XXX/test.php on line 21

hogeふがふがhoge
20030816131127
20030816131127
----------------------------------------------------------
mb_regex_set_options[z]
hogeふがふがhoge
hogeふがふがhoge
20030816131127
20030816131127
----------------------------------------------------------
mb_regex_set_options[b]
hogeふがふがhoge
hogeふがふがhoge
現在日時
2003-08-16 13:11:27
20030816131127
----------------------------------------------------------
mb_regex_set_options[d]
hogeふがふがhoge
hogeふがふがhoge
現在日時
2003-08-16 13:11:27
20030816131127
----------------------------------------------------------

この結果を見ると、'u'か'z'かな?という気がしますが、まだまだ
テストも非常に少ないので、デフォルトについては、おいおい決定
するという事にして、一番問題ないものがデフォルトになればよい
と思います。

もしくは、

> デフォルトの構文をどうするかは、意見が分かれるところかもしれません。
> 私は、REG_SYNTAX_POSIX_EXTENDEDがデフォルトの方が移行は楽なような
> 気がします。また、REG_SYNTAX_RUBY をデフォルトにし、
> 
> mbstring.default_regex_syntax = 'd'
> 
> のような命令でphp.iniにおいてデフォルト設定を変えられるようにするのも
> ありだと思います。

php.iniでデフォルトを変更できる方法も賛成です。

--
Seiji Masugata<s.masugata @ digicom.dnp.co.jp>




PHP-dev メーリングリストの案内