2016-11-25 7 views
0

regcomp(glibcから)は、正規表現をコンパイルするためのPOSIX関数です。regcompの文字は何ですか?マルチバイトエンコーディングはこれを決定しますか?

 int regcomp(regex_t *restrict preg, const char *restrict pattern, 
    int cflags); 

は、たとえば[abc]のために、単一の文字の考え方に依存する正規表現でいくつかの構造があります。

マルチバイトエンコーディングが使用され、マルチバイト文字が式で使用されている場合、解釈はバイトシーケンスまたはマルチバイト文字列のいずれかとして処理されると異なります。特定のロケール変数のいずれかが設定されていない場合

$ { echo Г; echo Д; } | egrep '[Д]' 
Д 
$ { echo Г; echo Д; } | LANG=C egrep '[Д]' 
Г 
Д 
$ 

LANGはデフォルト値である:ここ

Iは(C関数regcompとしてこの点で同じであってはならない)grepこの考えを示しますだから問題は、どちらがエンコーディングについてのregcompの考えに影響するかということです。 grepについては

$ locale 
LANG=ru_RU.utf8 
LC_CTYPE="ru_RU.utf8" 
LC_NUMERIC="ru_RU.utf8" 
LC_TIME="ru_RU.utf8" 
LC_COLLATE="ru_RU.utf8" 
LC_MONETARY="ru_RU.utf8" 
LC_MESSAGES=POSIX 
LC_PAPER="ru_RU.utf8" 
LC_NAME="ru_RU.utf8" 
LC_ADDRESS="ru_RU.utf8" 
LC_TELEPHONE="ru_RU.utf8" 
LC_MEASUREMENT="ru_RU.utf8" 
LC_IDENTIFICATION="ru_RU.utf8" 
LC_ALL= 
$ 

答えて

0

regcompと同じ動作を持っていなければならない)、この決定のためにLC_CTYPEを尊重するようだ:

$ { echo Г; echo Д; } | LANG=en_US.utf8 egrep '[Д]' 
Д 
$ { echo Г; echo Д; } | LANG=en_US.utf8 LC_COLLATE=C egrep '[Д]' 
Д 
$ { echo Г; echo Д; } | LANG=en_US.utf8 LC_CTYPE=C egrep '[Д]' 
Г 
Д 
$ 
関連する問題