骨のダイスを転がそう

2009|01|02|03|04|05|06|07|10|12|
2010|01|02|03|04|05|06|07|08|09|10|11|
2011|02|03|05|06|07|08|09|10|11|12|
2012|01|02|04|05|09|10|11|12|
2013|01|02|04|
2014|11|
2015|01|04|05|
2016|06|07|08|09|11|
2017|01|02|03|04|
2018|03|

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 に書き込むって流れになりそうだなあ。