◀一般トップへ
  • 3742 正規表現で入れ子の括弧を検索する方法を教えて下さい
    • 3743 Re:正規表現で入れ子の括弧を検索する方法を教えて下さい
      • 3744 Re2:正規表現で入れ子の括弧を検索する方法を教えて下さい
      • 3748 Re2:正規表現で入れ子の括弧を検索する方法を教えて下さい
        • 3749 Re3:正規表現で入れ子の括弧を検索する方法を教えて下さい
          • 3750 Re4:正規表現で入れ子の括弧を検索する方法を教えて下さい
            • 3757 お礼:できました。m(__)m
            • 3780 すいさんへ:転載許可依頼
              • 3783 RE: すいさんへ:転載許可依頼
    • 3752 Re:正規表現で入れ子の括弧を検索する方法を教えて下さい
      • 3754 Re2:正規表現で入れ子の括弧を検索する方法を教えて下さい
        • 3755 Re3:正規表現で入れ子の括弧を検索する方法を教えて下さい
          • 3760 お礼:F4に割り当てたら快適です
        • 3758 Re3:正規表現で入れ子の括弧を検索する方法を教えて下さい
  • [3742] 正規表現で入れ子の括弧を検索する方法を教えて下さい 渡辺真 2004年04月03日 08:25

    この掲示版で恐縮ですが、お教え下さい。

    入れ子の括弧、例えば下記が有ります。

    <!-- <hr> -->

    これを正規表現、<[^>]*>で検索をかけると、対応しない括弧の範囲が検索されてしまいます。

    正しく、内側の括弧の範囲や、外側の括弧の範囲、を検索する方法をお教え下さい。
    • [3743] Re:正規表現で入れ子の括弧を検索する方法を教えて下さい じゅうじ 2004年04月04日 00:01

      ▼ 渡辺真さん
      <!--.*?-->|<.*?>
      でどうでしょうか。

      目次
       +サクラエディタ概要
        +正規表現ライブラリについて
      • [3744] Re2:正規表現で入れ子の括弧を検索する方法を教えて下さい げんた 2004年04月04日 01:11

        ><!--.*?-->|<.*?>
        >でどうでしょうか。
        そうか.*? なんてのも使えたんですね.
      • [3748] Re2:正規表現で入れ子の括弧を検索する方法を教えて下さい 渡辺真 2004年04月04日 08:43

        ▼ じゅうじさん
        > <!--.*?-->|<.*?>
        > でどうでしょうか。

        早速回答、有難うございました。

        すみません。(私の質問の仕方(しかた)が舌足らずでした。)

        上記のような、!--などの特長の無い、一般的な入れ子括弧の場合は、

        \(.*?\)

        だと、対応しない括弧の範囲が検索されてしまいます。

        内側の括弧の範囲や、外側の括弧の範囲、を検索するにはどうすればよいでしょうか?

        よろしくお願いいたします。

        m(__)m
        • [3749] Re3:正規表現で入れ子の括弧を検索する方法を教えて下さい すい 2004年04月04日 09:24

          >上記のような、!--などの特長の無い、一般的な入れ子括弧の場合は、
          >
          >\(.*?\)
          >
          >だと、対応しない括弧の範囲が検索されてしまいます。
          >
          >内側の括弧の範囲や、外側の括弧の範囲、を検索するにはどうすればよいでしょうか?

          <[^<>]*(<[^<>]*>[^<>]*)*[^<>]*>
          とかだろな。

          (~) で括ると、その中身を1個としてまとめて取り扱えます。
          その (~) の記述に「0個以上」の意味の * を付けて
          (~)* で「~に該当するパターンが0個以上ある」という
          非常によくあるパターン使っているだけです。

          ただし、この記述のままだと2重の入れ子まで。
          つまり
          <  <  >  <  >  >
          なんかならOKですが、
          <  < < > >  >
          みたいに3重は無理です。

          あと
          < | <  >  <  >  >
          で | の位置にカーソルを移動してからこのパターンで検索すれば、
          内側の括弧だけにマッチしてくれます。
          検索一致箇所の色分け表示は外側の括弧全体になりますが。
          • [3750] Re4:正規表現で入れ子の括弧を検索する方法を教えて下さい すい 2004年04月04日 10:03

            解説追加

            ↓まず、基本パターン
            <[^<>]*>
            これで対応する括弧だけにマッチしますね。
            ただしこの記述では入れ子には全く対応していません。

            入れ子に対応するための準備として
            <[^<>]*[^<>]*>
            と変更します。(まだ入れ子非対応。当然、この記述でも対応する括弧にはマッチしますが。)

            で、↑上記の [^<>]* と [^<>]* の間に
            (<[^<>]*[^<>]*>[^<>]*)*
            という、「( 対応する括弧の組み合わせ+括弧とは無関係な 0字以上の文字列 )が 0回以上繰り返される」
            の記述を挿入。↓
            <[^<>]*(<[^<>]*[^<>]*>[^<>]*)*[^<>]*>

            ↑これで2重の括弧に対応。

            さらに↑上記の [^<>]* と [^<>]* の間に
            (<[^<>]*[^<>]*>[^<>]*)*
            という、「( 対応する括弧の組み合わせ+括弧とは無関係な 0字以上の文字列 )が 0回以上繰り返される」
            の記述を挿入。↓
            <[^<>]*(<[^<>]*(<[^<>]*[^<>]*>[^<>]*)*[^
            <>]*>[^<>]*)*[^<>]*>

            ↑これで3重の括弧に対応。

            さらに↑上記の [^<>]* と [^<>]* の間に
            (<[^<>]*[^<>]*>[^<>]*)*
            という、「( 対応する括弧の組み合わせ+括弧とは無関係な 0字以上の文字列 )が 0回以上繰り返される」
            の記述を挿入。↓
            <[^<>]*(<[^<>]*(<[^<>]*(<[^<>]*[^<>]*>[^
            <>]*)*[^<>]*>[^<>]*)*[^<>]*>[^<>]*)*[^<>
            ]*>

            ↑これで4重の括弧に対応。

            さらに↑上記の [^<>]* と [^<>]* の間に...
            <以下繰り返し>

            入れ子を増やすために記述がどんどん長くなってしまうのですよね、これじゃ。
            もっと良い記述方法がありそうな気もするんですけど...
            思い付かなかったので。。。
            • [3757] お礼:できました。m(__)m 渡辺真 2004年04月04日 16:51

              ▼ すいさん
              > 解説追加

              ご親切な解説まで有難うございました。

              \([^\(\)]*(\([^\(\)]*(\([^\(\)]*[^\(\)]*
              \)[^\(\)]*)*[^\(\)]*\)[^\(\)]*)*[^\(\)]*
              \)

              で、下記の検索ができました。

              (先の書き込みの(特長(とくちょう))は(特徴)の誤記でした。(^_^;))
            • [3780] すいさんへ:転載許可依頼 渡辺真 2004年04月07日 20:35

              すいさんの「解説」などを、私のホームページの、「正規表現の事例」として、転載させていただきたく、お願いいたします。

              今後ともよろしくお願いいたします。
              • [3783] RE: すいさんへ:転載許可依頼 すい 2004年04月08日 01:39

                >すいさんの「解説」などを、私のホームページの、「正規表現の事例」として、転載させていただきたく、お願いいたします。
                >
                >今後ともよろしくお願いいたします。

                この掲示板内の私の発言でしたら全て御自由にどうぞ。 (*^^*)/
    • [3752] Re:正規表現で入れ子の括弧を検索する方法を教えて下さい しみづ 2004年04月04日 11:51


      >正しく、内側の括弧の範囲や、外側の括弧の範囲、を検索する方法をお教え下さい。

       「検索」という言葉が、選択されるという意味でしたら、マクロ会議室にあるマクロ、例えば私の【brasel.js】が動く環境でしたら、改造すれば現在のカーソル以降にある、最初の<と対応する>の間を選択させることはできそうな気がしますけど。
      • [3754] Re2:正規表現で入れ子の括弧を検索する方法を教えて下さい すい 2004年04月04日 15:07

        > 「検索」という言葉が、選択されるという意味でしたら、マクロ会議室にあるマクロ、例えば私の【brasel.js】が動く環境でしたら、改造すれば現在のカーソル以降にある、最初の<と対応する>の間を選択させることはできそうな気がしますけど。

        単純に「カーソル位置以降の括弧を選択出来れば OK かつマクロで OK」なら
        WSH なんて必要ないんじゃかと。

        キーボードマクロでこれだけ。
        # 検索マッチ文字列の色が鬱陶しいですけど。
        -----
        //キーボードマクロのファイル
        // カーソル位置以降の < ( { いずれかの括弧~それに対応する括弧までを選択する。

        S_CancelMode(0); // 各種モードの取り消し - 選択状態を解除
        S_SearchNext('[<({]', 20); // 次を検索 - '<' , '(' , '{' どれかを検索
        S_Left(0); // カーソル左移動
        S_BeginSelect(0); // 範囲選択開始
        S_BracketPair(0); // 対括弧の検索
        S_Right(0); // カーソル右移動
        -----
        • [3755] Re3:正規表現で入れ子の括弧を検索する方法を教えて下さい すい 2004年04月04日 15:21

          ># 検索マッチ文字列の色が鬱陶しいですけど。
          修正です。
          こうすれば検索文字列の色表示も鬱陶しくは なくなりますね。
          -----
          //キーボードマクロのファイル
          // カーソル位置以降の < ( { いずれかの括弧~それに対応する括弧までを選択する。

          S_SearchNext('[<({]', 20); // 次を検索 - '<' , '(' , '{' どれかを検索
          S_CancelMode(0); // 各種モードの取り消し - 選択状態を解除
          S_SearchClearMark(0); // 検索マークの切替え - 検索文字列の色分け表示を解除
          S_BeginSelect(0); // 範囲選択開始
          S_BracketPair(0); // 対括弧の検索
          S_Right(0); // カーソル右移動
          -----
          • [3760] お礼:F4に割り当てたら快適です 渡辺真 2004年04月04日 20:41

            ▼ すいさん
            > 修正です。

            有難うございました。

            下記のようにしてF4に割り当てたら、あらゆる「括弧」に、次々飛べるようになりました。

            S_SearchNext('[\[<({「『【《([〔]', 20); // 次を検索 - '[<({「『【《([〔' どれかを検索

            m(__)m
        • [3758] Re3:正規表現で入れ子の括弧を検索する方法を教えて下さい しみづ 2004年04月04日 17:53


          >WSH なんて必要ないんじゃかと。

           「なんて」……。まあ、「などは」の言い間違いと善意に解釈しましょう。

          >S_SearchNext('[<({]', 20); // 次を検索 - '<' , '(' , '{' どれかを検索

           なるほど、そういうものもありましたか。勉強になりました。