PHP регулярное выражение, соответствующее разрыву абзаца - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть следующий текст:

This is some test I want to keep\n
\n
**Header**  \n
Some test text \n
Another test  \n
Something else  \n
\n
 - bullet point i want to keep
 - this bulleted list could be another paragraph or header, etc.

Я пытаюсь найти регулярное выражение, которое будет соответствовать ...

**Header**  \n
Some test text \n
Another test  \n
Something else  \n
\n

... так что я могу удалить этот сегмент содержимого. Для меня безопасно определить это по тексту заголовка, в данном случае Header, но я не могу предположить, что окончание - это маркированный список, это может быть что угодно, поэтому я планировал завершить матч двумя новыми строками.

Я пытался найти регулярное выражение, которое будет делать то, что мне нужно, \*\*Header\*\*(?:.+?)(?:\r*\n){2,}, кажется, но я не могу заставить его соответствовать - см. https://regex101.com/r/1OUgAV/1/.

Чувствуется, что мне здесь не хватает чего-то глупого, кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 19 апреля 2020

В тексте буквально вместо новой строки стоит \n. Но шаблон, который вы пробовали, будет совпадать только в том случае, если текст также заканчивается двумя символами новой строки. не будет соответствовать , когда текст закончится после Something else

. Вам не нужен модификатор s, чтобы точка соответствовала новой строке. Вместо этого вы можете сопоставить все строки, утверждая, что в начале строки последующее не является новой строкой.

Если вы хотите сопоставить только часть заголовка, вы можете использовать

\*\*Header\*\*.*(?:\r?\n(?!\r?\n).*)*

Объяснение

  • \*\*Header\*\* Совпадение **Header**
  • .* Совпадение с любым символом кроме символа новой строки 0+ раз
  • (?: Группа без захвата
    • \r?\n Соответствует новой строке
    • (?!\r?\n).* Утверждение того, что прямо направо, не является другой новой строкой. Затем сопоставьте всю строку.
  • )* Закройте группу и повторите 0+ раз

Regex demo

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