◀一般トップへ
  • 3634 正規表現キーワードで単語の検索
    • 3635 Re:正規表現キーワードで単語の検索
    • 3636 正規表現キーワードで単語の検索
  • [3634] 正規表現キーワードで単語の検索 tak 2004年02月12日 16:44

    文中の数値を強調表示させようとしています。
    秀丸の場合は、文字列を
    ([0-9]+)|([0-9]+\.[0-9]+)|((0x)[0-9a-fA-
    F]+)|([0-9a-fA-F]+)
    検索方法で「単語の検索」にチェクを入れると期待した動作をしてくれるの
    ですがサクラエディタの場合「単語の検索」が無いので、上記のキーワード
    だと"MESSAGE" 等の単語中のE, Aも強調表示されてしまいます。

    正規表現で単語の検索をする方法はない物でしょうか?
    • [3635] Re:正規表現キーワードで単語の検索 (全略) 2004年02月12日 23:15

      ▼ takさん
      > 文中の数値を強調表示させようとしています。
      > 秀丸の場合は、文字列を
      > ([0-9]+)|([0-9]+\.[0-9]+)|((0x)[0-9a-fA-
      > F]+)|([0-9a-fA-F]+)
      > 検索方法で「単語の検索」にチェクを入れると期待した動作をしてくれるの
      > ですがサクラエディタの場合「単語の検索」が無いので、上記のキーワード
      > だと"MESSAGE" 等の単語中のE, Aも強調表示されてしまいます。
      >
      > 正規表現で単語の検索をする方法はない物でしょうか?
      文字列前後を非単語構成文字(\W)でくくるとか
    • [3636] 正規表現キーワードで単語の検索 もか 2004年02月13日 00:10

      単語といっても、その区切り方には色々ありますので、出来るパターンと無理なものがあります。
      sakura-editor + Bregexp.dllの場合は \bで単語区切りを(SJIS未対応ながら)拾えます。
      この\bは、 [A-Za-z0-9_]のまとまりを単語とします。
      これでは、用が足りないとときは、先読みと後読みというのを使います。
      が、後読みには未対応ですので、\bを先頭に書いて、末尾にも\bをつけてください。
      # JREだと 多分\> \<というのに相当するはず。
      それから、JREでは最長一致の原則(POSIX風)のようですが、
      BREGEXP(Perl5)では、「|」の論理和は、左側から順に見て、一番最初にマッチしたパターンを選択するため、
      こういうのは、厄介です。
      ちなみに、数値の色分けをでC風だったらカラー半角数値で色を変えれます。

      例えば、こんな感じだと思います。
      \b((0x[0-9a-fA-F]+)|([0-9]+(\.[0-9]+)?)|
      ([0-9a-fA-F]+))(?![0-9A-Fa-f.])\b
      想定するテストケース
      マッチすべき: 0x19 0x1AF 0129 3245 012.345 01eF aAb BDF
      マッチしないべき: 0xx0 0x MMX01 12f.3 .4 5. CGI TTF
      区切り: 0/0 0+0 0*0 0-0 (0+0) A%4
      えーと、これだと、12f.3 .4 の3と4にもマッチしてしまいました。うーん難しい
      # 後読みができない... 私にはこれ以上無理っぽいです。