骨のダイスを転がそう
2012-02-21
_ [正規表現] 先読みを誤解していた。
css から正規表現で、長さ指定だけを抽出したいとか思い、
#class{ margin: 10px 10px 10px 10px; }
といったところに、
(?=:|\s+)\d+(px|em|%)
とやっても上手く行かない。あれ?この場合、
「コロンかスペース」が手前に存在していて、後ろに、px,em,% のどれかが付いている場所
を選択してくれるんじゃないの?
どうもこれはよくある誤解みたいで、上の例で行く \d+ でヒットした数値の中で、 (?= ) 内部の条件に合致したものだけがヒットするらしい。\d+ でかつ、 :|\s+ というのはありえないから当然ヒットしない。
(?<=:|\s+)\d+(px|em|%)
こうすれば良いらしい。
2012-02-26
_ [JScript][SQLite] 文字列の扱い
サクラエディタで、SQLite が使えないか、と思い、SQLiteODBC をインストールしてみて、いろいろいじってみる。
Shift_JIS で保存した、js を cscript で実行すると文字列は、SQLite に UTF-8 で保存され、SQLite からの文字の取り出しも問題なし。
一方で、UTF-8 で保存したスクリプトから INSERT すると文字化けする。というか、JScript って、スクリプト自身のエンコーディングや文字列リテラルのエンコーディングってどうやって管理してるんだ ?。
いろいろ調べてみると、Windows (ウチは7だが、2000以降全部) は、文字列は、UTF-16LE というエンコーディングとして扱われているようだ。一方、スクリプトのリテラルが化けないのは、Shift-JIS (というか CP932 というか Windows-31J) の場合だけ。ここを切り替える方法はあるのかは良く分からない。(ruby の -Ks オプションとか、 -Ku オプションみたいなの)
ADODB.Stream を使った文字コード変換について書かれているページはけっこう見付かったけど、これは、ファイルからファイルへの変換で、途中で、スクリプトの中の文字列にしていない。するとSQLite を使おうと思うと、「エディタで指定されたエンコーディング」→「Shift_JIS」とした上で、SQLite に書き込むって流れになりそうだなあ。