Notepad++ でワイルドカード/正規表現文字を使用して検索と置換を行う

Notepad++ でワイルドカード/正規表現文字を使用して検索と置換を行う

次のような構造の HTML コードがあります。

        <td class="tar">
      <div class="bubble in">
        Some Text, I want to keep! And maybe even an image: <img src=
        "12345.png" width="22" height="22" alt="0" class="example" /><br />
        <span class="time"><div style="text-align:right">17:14</span></div>
      </div>
    </td>
  </tr>

  <tr>
    <td class="tal">
      <div class="bubble out">
        Some Text, I want to keep!<br />
        <span class="time"><div style="text-align:right">17:15</span></div>
      </div>
    </td>
  </tr>

これは、2 人の参加者が「バブルイン」と「バブルアウト」するチャットの構造です。ここで、「バブルイン」のタイムコードを画像で拡張したいと思います。

私が思いついたのは次の通りです:

検索対象:

<div class="bubble in">[^"]*<span class="time"><div style="text-align:right">([0-9]*[0-9]*):([0-9]*[0-9]*)</span></div>

と置換する:

<div class="bubble in">\1<span class="time"><div style="text-align:right">\2\3\4\5\6&#160<img src= "test.png" width="16" height="10" alt="0"/

検索は機能しますが、\1 の置換はなぜか機能しません。助けてもらえますか? よろしくお願いします

答え1

は、そのグループをキャプチャしていないため機能\1しません。括弧で囲む必要があります。しかし、他にも問題があるようです... Notepad++ で例を使って試してみると、一致するものが見つかりません。期待もしていません。

現在のパターンでは、開いている div タグ内のバブル、それに続く二重引用符以外の任意の数の文字、それに続く時間範囲タグが検索されます。この例では、最初に img タグに二重引用符があるため、一致しません。
時間キャプチャ部分でも、奇妙なことが起こっています。[0-9]*つまり、0 から 9 までの数字が任意の回数出現することを意味しますが、その後、それを繰り返します。実際には、0 から 9 を 2 回繰り返し、その後にコロン、さらに 2 つが続くだけだったと思います。

それで:
<div class="bubble in">(.*?)<span class="time"><div style="text-align:right">([0-9]{2}):([0-9]{2})</span></div>

.*?非貪欲に一致を検索します。ただし、div 内のバブルに時間範囲がない場合、時間範囲が見つかるまで、その div から出て他の場所に移動します。うまく対処できればよいのですが、そうでなければ非常に複雑になります。 は、正確に 2 が必要であることを正規表現に伝えます。時間の先頭にゼロがない場合は、 1 から 2 までを検索するよう [0-9]{2}に変更します。{1,2}

最後に、置換では、キャプチャされたグループが 3 つあります...「保存したいテキスト...」、時間と分。したがって、\4\5\6存在しません。ああ、オプションにチェックマークを付けることを忘れないでください。そうしない. matches newlineと、どちらも一致しません (少なくともあなたの例では)。

幸運を!

関連情報