◀一般トップへ
  • 5756 正規表現キーワードでの後方一致検索
    • 5758 RE: 正規表現キーワードでの後方一致検索
      • 5759 Re2: 正規表現キーワードでの後方一致検索
  • [5756] 正規表現キーワードでの後方一致検索 りう 2007年01月20日 20:03

    正規表現キーワードで
    \section{abc} や \subsection{abc} というテキストの
    abc のみをハイライトさせることは可能でしょうか?

    /\\\w*section\{[^\}]+\}/k
    の [^\}]+ に該当する部分です。

    bregexp.dll には前方一致検索の (?=...) はあるので

    /\\\w*section(?=\{[^\}]+\})/k

    として上記の場合の \section や \subsectionだけをハイライトすることはできますが、
    後方一致検索の (?<=...) がない?らしく

    /(?<=\\\w*section\{)[^\}]+(?=\})/k

    が、不正な正規表現としてエラーになります。
    やりたいことは上の正規表現のマッチです。
    ぜひアドバイスをお願いします。

    Perl の正規表現の後方一致
    http://www.rfs.jp/sb/perl/02/09.html
    • [5758] RE: 正規表現キーワードでの後方一致検索 すい 2007年01月20日 23:47

      正規表現は Bregexp.dll というファイルによって提供されている機能です。

      先読み (?=xxx) ならサクラエディタ用の Bregexp.dll
      (Bregexp.dll V1.02 for SAKURA) でも動作しますが、
      逆の戻り読み(後読み) (?<=xxx) はサポートされていません。

      で、http://webs.to/ken/ (K.Takata's software ) で配布されている
      bregonig.dll Ver.1.20 なら戻り読みもサポートされています。
      # ↑これを Bregexp.dll に改名してサクラエディタの Bregexp.dll と入れ替える。

      ただ、戻り読み (?<=xxx) の xxx の中に * を含める事ができないので、

      (?<=\\\w*section\{)[^\}]+(?=\})

      という表現は使用できませんねぇ。\w* を削除した

      (?<=\\section\{)[^\}]+(?=\})

      なら動作しますけど。

      っていうか、普通、戻り読みって固定長の正規表現しか受け付けないんですけど...
      他のツールではどうだか知りませんが、少なくとも perl では無理。
      戻り読みの中に * なんて使えるわけが...

      戻り読み内に * が使えないのも bregonig.dll Ver.1.20 で使用されている
      正規表現エンジン鬼車の仕様のようですし。
      • [5759] Re2: 正規表現キーワードでの後方一致検索 りう 2007年01月21日 01:18

        ▼ すいさん

        戻り読み内が固定長だったとは知りませんでした…。

        bregoing.dll を入れて
        * は使わない書き方でやりたいことが無事実現できました。

        ありがとうございました。