[PHP-users 12718] Re: mb_regex_set_options()の引数って?
Moriyoshi Koizumi
php-users@php.gr.jp
Wed, 22 Jan 2003 08:14:44 +0900
小泉です。
On Tue, Jan 21, 2003 at 08:21:35PM +0900, Y.Watanabe wrote:
> わたなべです。
>
> どなたか、
> mb_regex_set_options
> http://www.php.net/manual/ja/function.mb-regex-set-options.php
> の引数の書き方ってご存知ないですか?
> //マニュアルはまだ完全じゃないみたいなので・・・
>
============================================================================
mbregex オプションについて
"i" "x" "m" "s" "p" "e" の文字の組合せを指定します。
Ruby 互換 (どのバージョンと互換かは失念) とのことなので、
そちらに馴染みのある方はすぐにお分かりになると存じます。
"i" - 英文字の大小を無視します。全角英文字はこのオプションと無関係だったか
と思います。ただ、文字が大きいか小さいかが何によって決定されているの
かはそれほどソースを読み込んでいないので、よく分かりません。
ロカール依存でしょうか?とにかくここは他の mbstring 関数と首尾一貫し
ていない点です。
"x" - 拡張正規表現モードを有効にします。このモードでは、「素」の(文字クラ
スで表現されていない)改行やスペースは無視され、さらに、"#" で始まる
行はコメントとして扱われます。
"s" - 入力を単一の行から構成されたテキストとみなします。
つまり、"^" や "$" の扱いがそれぞれバッファの始端と終端に変わります。
"m" オプションと組合せもできます。
"m" - 改行 "\n" が "." にマッチするようになります。
つまり、
// 結果 abc\ndef\n
print mb_ereg_replace('...$.', '--', "abc\ndef\n", "");
// 結果 ----
print mb_ereg_replace('...$.', '--', "abc\ndef\n", "m");
"p" - POSIX もどき正規表現モードを指定します。デフォルトオプションです。
"m" と "s" を同時に指定した状態と同一です。
つまり、
print mb_ereg_replace('^.bc.$', "--", "abc\n", "s"); // 結果 abc\n
print mb_ereg_replace('^.bc.$', "--", "abc\n", "m"); // 結果 abc\n
print mb_ereg_replace('^.bc.$', "--", "abc\n", "p"); // 結果 --
"e" - 置換する文字列を有効な php のステートメントとみなし、評価して、
その結果と置き換えます。
// 結果 27
print mb_ereg_replace('(.*).(.*)', "\\1\\2\\3", "24+3", "e");
知られているバグ:
$ echo '<?php
print mb_ereg_replace("\$", "--", "abc\ndef\n", "");
?>' | php
結果:
abc----
def----
$ ruby -e 'print "abc\ndef\n".gsub(/$/, "--");'
結果:
abc--
def--
$ perl -e '$_ = "abc\ndef\n"; $_ =~ s/$/--/mg; print $_;'
結果:
abc--
def--
--
この3つの挙動は異りますので注意してください。
これはバグでしょうか?
===========================================================================
以上、間違いがありましたらぜひ指摘してください。
>
> ところで、
> mb_ereg_search_init
> http://www.php.net/manual/ja/function.mb-ereg-search-init.php
> と、どう違うんだろう・・・?
mb_ereg_search_init() は mb_ereg_search() や mb_ereg_search_getregs()
との合わせ技に使います。
一方、mb_regex_set_options() は、mb_ereg() など、オプション指定ができない
関数に対しオプションを指定する際に利用します。
--
Moriyoshi