Я хочу найти формулу регулярного выражения, чтобы выбрать все строки, которые не имеют <p class="test_formal"> перед <span class="test_formal2">

<p class="test_formal"><span class="test_formal2">

Я сделал регулярное выражение, но не слишком хорошо.

(?s)\A(?!.*?(?<!\w)(<span class="test_formal2">)(?!\w)<p class="test_formal">).*

Кто-нибудь может мне немного помочь?

1 ответ1

2

Это будет соответствовать всем строкам, которые имеют:

<span class="test_formal2"> сопровождается или нет <p class="test_formal">

Но не <p class="test_formal"> а затем <span class="test_formal2">

  • Ctrl+F
  • Найти что: ^(?:(?!<p class="test_formal">).)*<span class="test_formal2">.*$
  • проверить обернуть
  • проверьте регулярное выражение
  • ПРОВЕРИТЬ . matches newline
  • Поиск в документе

Объяснение:

^                               # beginning of line
  (?:                           # start non capture group
    (?!                         # negative lookahead, make sure we haven't
      <p class="test_formal">   # literally
    )                           # end lookahead
    .                           # 1 any character
  )*                            # end group, may appear 0 or more times
  <span class="test_formal2">   # literally
  .*                            # 0 or more any character
$                               # end of line

Дано:

<p class="test_formal">
<span class="test_formal2">
<p class="test_formal"><span class="test_formal2">
blah blah <p class="test_formal"><span class="test_formal2"> blah blah
<span class="test_formal2"><p class="test_formal">
blah blah <span class="test_formal2"><p class="test_formal"> blah blah

Это соответствует:

Search "^(?:(?!<p class="test_formal">).)*<span class="test_formal2">.*$" (3 hits in 1 file)
  new 2 (3 hits)
    Line 2: <span class="test_formal2">
    Line 5: <span class="test_formal2"><p class="test_formal">
    Line 6: blah blah <span class="test_formal2"><p class="test_formal"> blah blah

Regex101 Demo

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