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=
$