スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【同じタグを付けた記事の一覧】

Mery(テキストエディタ)色分け表示用正規表現の優先順位

2015年04月21日(火)19時40分

複数の着色条件に一致する文字列

テキストエディタ「Mery」には、プログラムのソースコード等の編集に便利な、特定文字列を着色する「編集モード」があります。
その「編集モード」で「どの文字列を何色にするのか」の指定は、着色対象の文字列を直接記述する以外に、正規表現を使うことも可能です。
では、「ある文字列にマッチする正規表現が複数ある場合は何色になるのか?」というのが、今回の内容となります。
まあ、正直この情報にいったいどれだけの需要があるのか?という疑問はなくはないのですが…。

具体例

具体的には、例えば「0x」で始まる十六進数に一致する正規表現「0x[\da-f]+」を「赤色」に、先頭が「%」で始まる行を表す正規表現「^%.*$」を「青色」に着色するよう設定したとして、「% 初期値は 0x1234 です。」という行が、以下のいずれに着色されるのか?という問題です。

  1. % 初期値は 0x1234 です。
  2. % 初期値は 0x1234 です。
  3. % 初期値は 0x1234 です。

結論から言うと、これは「2」番になります。

優先順位変更

では「3」番のように一行すべてを青色で塗りつぶしたい場合にはどうするのか?ですが、これは例えば「%行」の正規表現を「^%.*.*.*.*$」のように変更します。
元と違うのは「.*」が四つになったことですが、この「.*」は「何でもいい文字が、あってもなくてもよい」ということを示す正規表現で、これはいくら連続して書いたところで、意味上は一つの「.*」と等価となります。
すなわち、変更前も変更後も、マッチする文字列自体に変化はないわけです。

文字数優先

では何が変わるのかというと、文字数です。
十六進数に一致する正規表現「0x[\da-f]+」は10文字です。
「%」で始まる行を表す正規表現「^%.*$」は5文字でした。
これが「^%.*.*.*.*$」と11文字に水増しされています。
つまり、「マッチする文字列が被る場合は正規表現の長い方が優先」というわけです。

内部的には?

例えば、正規表現ではない純粋な文字列として、「in」を赤色、「integer」を青色に指定した場合に、「integer」という結果が得られるのは、あまり望ましいことではないはずです。
これを期待通り「integer」と表示させるために、Mery の内部では、「文字数の少ない単語から順に上書き着色していく」という処理がなされていると推測され、正規表現の場合も、これに準じているのであろうと考えられます。

(?#コメント)

ということで、優先順位を変えるには、「文字数を水増しすればよい」ということがわかりました。
ただし、それを実現するために「意味の変わらない無駄に長い正規表現」を無理やり作り出す必要はなさそうです。
というのも、Mery の正規表現では「(?#)」形式でコメントを付加することができ、これはコメントですから内容には全く影響しないのですが、文字数としてはしっかりカウントされるようなのです。
つまり、これを利用して文字数を簡単に調整できます。
まあ、こういうのは仕様かどうかはわかりませんし、どちらかというとバッドノウハウ的なものを感じなくもないのですが、「Mery(テキストエディタ)で Prolog ソースコードの色分け表示」では、この方法でいくつかの優先順位を調整しました。

関連記事

【同じタグを付けた記事の一覧】
Mery

スポンサーサイト

コメントの投稿

非公開コメント

最新記事
最新コメント
Amazonおまかせリンク
カテゴリ
タグクラウド
Amazonお買い得ウィジェット
カレンダー
09 | 2017/03 | 10
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -
月別アーカイブ
プロフィール

Author:電脳太助
Website:電脳スピーチ web

RSSリンクの表示
メールフォーム

名前:
メール:
件名:
本文:

サイト内検索
Ads by Google
FC2アクセスランキング
Ads by Google
FC2拍手ランキング
ユーザータグ

音楽管理(65)
ポータブル(57)
ソフト紹介(44)
プログラミング(42)
音声技術(41)
自作ソフト(34)
サイト運営(32)
FC2(31)
ブログ(30)
iTunes(26)
Windows(25)
LISMO(24)
音声合成(23)
音声認識(22)
x-アプリ(22)
電子ブック(22)
eラーニング(20)
バックアップ(19)
語学学習(19)
foobar2000(18)
ソースコード(17)
画像管理(15)
WindowsLiveWriter(15)
C++(14)
アフィリエイト(10)
DnspTools(10)
ウォークマン(9)
fi-6130(9)
FLAC(9)
Gracenote(8)
英語音読学習計画(8)
Prolog(8)
JavaScript(8)
ベクター(8)
雑記(8)
CodeBlocks(7)
SyntaxHighlighter(7)
TraConv(7)
wxWidgets(7)
spcbght(7)
DCP-J552N(6)
W63CA(6)
MP3Gain(6)
WinRT(6)
iGoinLM(6)
VirtualBox(6)
WindowsLiveMesh(6)
英語発音矯正実験(6)
ExactAudioCopy(6)
楽器演奏(5)
Mery(5)
LAME(5)
音楽技術(5)
GalateaProject(4)
LLVM(4)
nLite(4)
MIDI(4)
ホームページ(4)
WindowsLiveSkyDrive(4)
GalateaTalk(4)
PC-98(3)
カウンター(3)
AACGain(3)
iTCDini(3)
OverCutChecker(3)
拍手(3)
PK-513L(3)
UniversalExtractor(3)
アクセスランキング(3)
ImageCompositeEditor(2)
アクセス解析(2)
OCR(2)
qtaacenc(2)
資格試験(1)
AquesTalk(1)
AquesCmdDl(1)

FC2アクセスランキング
最新トラックバック
アクセスランキング
[ジャンルランキング]
コンピュータ
113位
アクセスランキングを見る>>

[サブジャンルランキング]
ソフトウェア
12位
アクセスランキングを見る>>
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。