Regex начинаются и заканчиваются одной и той же строкой, а не одним и тем же символом

Я хочу создать регулярное выражение для получения:

<p class="MyClass">
   <p> something 1 </p>
   <p> something 2 </p>
   <span>         <span>  // or more html tag here
   something
</p>
something's here, not in any tag!

от:

<p class="MyClass">
   <p> something 1 </p>
   <p> something 2 </p>
   <span>         <span>  // or more html tag here
   something
</p>
something's here, not in any tag!

<p class="MyClass">
   <p> another thing 1</p>
   <p> another thing 2</p>
   <p> another thing 3</p>
   another thing
</p>
...

Я думаю, что я буду использовать регулярное выражение, чтобы соответствовать всем между <p class="MyClass"> и следующий. Таким образом, регулярное выражение /(<p class="MyClass">[\s\S]*)<p class="MyClass">/Работай правильно в этом случае. Но это не работает, когда я хочу получить уведомление об этой странице http://daotao.dut.udn.vn/sv/G_Thongbao_LopHP.aspx. ДОМ такой странный?!

Извините за мой плохой английский.

1 ответ

Решение

Регулярное выражение должно быть

(<p class="MyClass">[\s\S]*?)(?=<p class="MyClass">|$)
  • [\s\S]*?: *? является ленивым квантификатором, так что он соответствует кратчайшему, по умолчанию - жадному (соответствует наибольшему).
  • (?=<p class="MyClass">|$): lookhead, чтобы он не относился к спичке, а |$ чтобы получить также последний матч
Другие вопросы по тегам