namazu-dev(ring)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: tolower()
Ryuji Abe <raeva@xxxxxxxxxxxx> wrote:
>> インデックスを作る段階 (mknmz) で、localeを意識せずに大文字
>> から小文字へ変換しているので、それに合わせて、検索側
>> (namazu) でも localeを意識せずに大文字から小文字へ変換した方
>> がいいです。
>
>なるほど。mknmzでは
> # Normalize into small letter.
> $$contref =~ tr/A-Z/a-z/;
>としているのですね。ならばASCIIに依存した変換の方がいいですね。
>ISO-8859-1なんかでもtolowerできたら嬉しいかなとか考えたのですけど。
perl で locale を意識して大文字から小文字へ変換するには次の
ようなコードを書きます。
use locale;
use POSIX qw(locale_h);
setlocale(LC_CTYPE, "fr_CA.ISO8859-1");
$foo = lc($foo);
lc() を使っているところが肝要です。単純に tr/A-Z/a-z/ とはで
きません。ちなみに、正規表現で「大文字」を表すには
[^\W0-9a-z_] と書くようです。
# Perl Cookbook に詳しく載っています。ただいま手元にないので
# 確認できませんが
>ところで、現在grep-2.4がリリースされていますけど、これの
>regex.cを眺めてみると
>
>/* For platform which support the ISO C amendement 1 functionality we
> support user defined character classes. */
>#if defined _LIBC || WIDE_CHAR_SUPPORT
>/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.
>*/
># include <wchar.h>
># include <wctype.h>
>#endif
>
(snip)
>というのがありますが、これって前からありましたっけ?
調べてみました。grep 2.0 にはありません。2.2からあります。
ちなみに、 2.1 では
# include <wctype.h>
# include <wchar.h>
の順でした。:-)
-- Satoru Takabayashi