Совпадение нескольких вхождений строки, начинающейся с символа - PullRequest
0 голосов
/ 18 декабря 2018

Я хочу написать регулярное выражение, совпадающее со строкой, которая начинается с необязательного пробела, <, куча вещей, а затем >.Например, все это должно соответствовать 3 раза:

<div
    data-test="foo"
    class="first bar baz"
>
   <h2>test</h2>
</div>

У меня это работает, и он использует следующее регулярное выражение: (^\s*<.*?>\s*$)+.Проверьте это в действии здесь .

Однако в настоящее время он работает, генерируя три совпадения.Есть ли способ сделать так, чтобы соседние строки, которые совпадают, возвращались как одно совпадение?

В приведенном выше примере, так как все сопоставлено, я хочу, чтобы оно возвращалось как одно совпадение.Может ли это произойти?

Редактировать: Чтобы уточнить - регулярное выражение должно соответствовать:

<foo>

также

    <h1>test</h1>

и даже

  <   b-8253j'\sf>

, но игнорировать

foo<bar>

, поскольку он фактически не начинается с <.

Если в той же строке не найдено >, он продолжаетсячтобы соответствовать всем строкам, пока не достигнет >:

   <div
   matches
   here>but this line is also matched</div>

Как я уже сказал, это делает мое регулярное выражение.Тем не менее, это будет соответствовать этому:

<div>
<foo></foo>
<baaaar>

Три разных раза.Поскольку все совпадает, я хочу, чтобы эти совпадения были объединены и возвращены как одно совпадение.

Однако, если средняя строка, например, недействительна, она должна вернуть 2 совпадения:

<div>         // match 1
no<foo></foo> // doesn't start with `<`, ignored
<baaaar>      // match 2

1 Ответ

0 голосов
/ 18 декабря 2018

Вы указали ленивое соответствие (соответствует наименьшей возможной подстроке).Удалите вопросительный знак, и вместо этого он попытается использовать жадный (соответствует наибольшей возможной подстроке): (^\s*<.*>\s*$)+

Но в целом обработка HTML с использованием регулярных выражений приведет вас к мучительному пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...