Regex: знайдіть всі рядки, починаючи з конкретного тегу і закінчуючи іншим тегом


1

Я хочу знайти всі рядки, починаючи з конкретного тегу і закінчуючи іншим тегом. Наприклад:

<p class="amigo">My mother is at home.<br>

спробував регулярний вираз, але не працює на користь, тому що виділення не зупиняється <br>, він вибирає все після нього, якщо у мене є більше таких тегів: .*<p class="amigo">(?s)(.*)<br>*$

Хтось може мені допомогти?

Відповіді:


1

Просто зробіть підстановку не жадібною:

<p class="amigo">(?s)(.*?)<br>
//               here __^

Редагувати відповідно до коментаря:

  • Ctrl+F
  • Знайти що: <p class="amigo">(?:(?!</?p).)*<br>
  • Випадок відповідності UNcheck
  • перевірити Загорнути
  • перевірити Регулярне вираження
  • ПЕРЕВІРИТЕ . matches newline
  • Search in document

Пояснення:

<p class="amigo">   # literally
(?:                 # start non capture group
    (?!</?p)        # negative lookahead, make sure we haven't "<p" or "</p"
    .               # 1 anycharacter
)*                  # end group, may appear 0 or more times
<br>                # literally

введіть тут опис зображення


Не зовсім, якщо я щось подібне не працює, він вибирає всі теги / рядки. <p class="amigo">My mother is at home.</p> <p class="amigo">My mother is at home.</p> <p class="amigo">My mother is at home.<br>
Тільки я

@JustMe: Дивіться мою редакцію.
Тото

0

також я знаходжу іншу відповідь:

<p class="amigo">(?s)(?-s)(.*)<br>*$

або

<p class="amigo">(?-s)(.*)<br>*$


(?s)означає "крапка відповідає (?-s)новому рядку " і означає "протилежне" крапка не відповідає новому рядку. Отже, (?s)(?-s)це те саме, що (?-s)для "Блокнот ++" - це те саме, що "Зніміть позначку точки збігається з новою лінією ". в межах 2 тегів >*$означає 0 або більше >перед закінченням рядка. Тут марно
Toto

Я не згадав у своєму регулярному виразі варіант "крапка відповідності новому рядку". Я просто тестую це, і працює. Звичайно, ти мені дав ідею, тож ти отримаєш мій голос. Перевірте мій регекс, ви побачите, що це працює, навіть якщо щось може здатися дивним :)
Just Me

Звичайно, це працює, я щойно дав вам кілька хитрощів, щоб зробити ваш регулярний вираз ефективнішим та простішим.
Тото

привіт, так. Але що саме означає "відповідати новим рядкам"?
Тільки я

Це означає, що .відповідає новому рядку ( \r, \n). Типова поведінка .не відповідає новому рядку.
Тото
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.