2004年09月25日
正規表現
SQLエディタで SELECT は色が変わってほしいが SELECT_A は色が変わってほしくない。
String の indexOf メソッドは単純検索なので SELECT_A も色が変わってしまう。
ということで正規表現でSQL予約語のハイライトを行うことに。
Javaも1.4から正規表現を使えるようになったがPerlの正規表現とは互換性がない。
まだ正規表現を自由に使いこなせてない状態だし、Webの情報はPerlの正規表現が多いことも考えてPerlの正規表現の方がいいだろう。ということでJavaでPerl互換の正規表現が使えるJakarta OROを使用することに。
ということで "/([^A-Za-z_]|^)" + word+ "([^A-Za-z_]|$)/" という風な感じで作成。
wordは予約語これで予約語の前後にアルファベットやアンダーバーがあったら反応しないハイライトが完成。
現在ハイライト処理はStyledTextクラスのaddLineStyleListenerメソッドでLineStyleListenerを登録しているけどカーソル移動だけでも反応するようだ。
しかもなぜか1文字入力するごとに2度処理が走ってる?? う~む。
カーソル移動やマウスのテキスト選択ドラッグでも反応するし文字列に変更がなければ検索処理をしないようにした方がいいな。
とりあえずハイライト処理は完成と言うことで
Trackback on "正規表現"
このエントリーのトラックバックURL:
"正規表現"へのトラックバックはまだありません。
エコーバックとか?
そういうのがJavaにあるのかどうか知らないんだけど(^^;
う~ん、わかんね。
SWTのLineStyleイベントがそういう仕様なのかな??
リスナー2回登録したってわけじゃないし。
しかも1回目のみ処理するようにしたら色分けが正しく行われなくなったようだ・・。
詳しく調べてみないとよくわかんないけどこれはそのままにしておいた方が良さそうだw