У меня есть 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>

Это структура чата с двумя участниками "пузыря в" и "пузыря в". Теперь я хочу расширить временной код "пузыря" с изображением.

Вот что я придумал:

Найти то, что:

<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

0

\1 не работает, потому что вы не захватываете эту группу - вам нужно заключить ее в скобки. Но, похоже, что есть еще проблемы ... Когда я пытаюсь сделать это в Notepad++ на вашем примере, он не находит соответствия, и я не ожидаю этого.

Ваш текущий шаблон ищет пузырь в открытом теге div, за которым следует любое количество символов, которые не являются двойными кавычками, а затем тег time span. В вашем примере у вас сначала есть двойные кавычки в теге img, поэтому они не совпадают.
В части захвата времени происходят также некоторые странные вещи: ваш [0-9]* означает любое количество вхождений цифр 0-9, но затем вы повторяете это. Я предполагаю, что вы действительно хотели 0-9 дважды, затем двоеточие и еще два.

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

.*? буду не жадно искать спички. Но, если у пузыря в div нет промежутка времени, то он сразу же выйдет из этого div и во что-нибудь еще, пока не найдет промежуток времени. Надеюсь, это то, с чем вы можете справиться, иначе это будет действительно сложно. [0-9]{2} говорит регулярному выражению, что вы хотите ровно два. Если у вас нет ведущих нулей по времени, то измените его на {1,2} который будет искать от одного до двух.

Наконец, вместо вас - теперь есть 3 захваченные группы ... «Некоторый текст, я хочу сохранить! ...», часы и минуты. Так что \4\5\6 нет. О, и не забудьте поставить галочку . соответствует опции новой строки , или вы не будете соответствовать (по крайней мере из вашего примера).

Удачи!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .