くりーむわーかー

プログラムとか。作ってて ・試しててハマった事など。誰かのお役に立てば幸いかと。 その他、いろいろエトセトラ。。。

正規表現

C# 正規表現のパフォーマンス

最近、正規表現でちょろちょろ判定をしてたんだけど、書き方によって相当パフォーマンスに影響あるんですね。当たり前か。

ホントにかなり変わる。例えば、

string reg1 = @"(パンダ|ライオン|デザイン)(。|\d|\s)";

みたいな正規表現はクソ重い。何となく、「(a|b|c)(x|y|z)」みたいな組合せがすごい増えるとやれる感じがする。上の例でいうと、

string reg2 = @"パンダ(。|\d|\s)";
string reg3 = @"ライオン(。|\d|\s)";
string reg4 = @"デザイン(。|\d|\s)";

って書いてそれぞれ個別に判定した方が数段早かったりする。上の例で計測してみると、だいたい2.6倍早くなった。

組合せを何個も使うような正規表現は考え物ですね。当たり前なのかもしれませんが。。。

C#でutf-16の外字領域の文字があるか調べる

最近、文字コードで色々あった。とりあえず外字。utf-16の文字列内にUnicodeの私用領域の文字が含まれているか調べる正規表現。

public void hoge(string wkStr)
{
	string regexp = @"[\uE000-\uF8FF]";
	if(System.Text.RegularExpressions.Regex.IsMatch(wkStr,reqexp))
	{
	     Console.WriteLine("外字");
	}
}

そーいえば、バイナリエディタで見るとバイトの並びって逆になるのだろうか。いまいち分かってない。 エディタにもよるのかしら。

Bzで見ると「E0 00 F8 FF」⇒「00 E0 FF F8」で見える。

問合せ