Как включить несколько новых строк и несколько пробелов в группу регулярных выражений? - PullRequest
0 голосов
/ 24 мая 2018

У меня следующая проблема.

Мне нужно сопоставить все эти варианты с одним регулярным выражением

<pre><code>some code
some code
code

code

Кроме того, послетег <pre><code> может содержать несколько пробелов.

Я пробовал это

<pre><code>(.*?)<\/code><\/pre>

Но это не действовало как окончательное решение.

Ответы [ 4 ]

0 голосов
/ 24 мая 2018

использование отрицательного прогнозного утверждения

<pre><code>((?!<\/code>).+)<\/code><\/pre>
0 голосов
/ 24 мая 2018

Если в вашем коде нет < или >, чем использовать:

<pre><code>([^<>]+)<\/code><\/pre>

Это означает отсутствие содержимого с char < или >, с этим регулярным выражением вы можете разобратьвсе содержимое от <pre><code> до

0 голосов
/ 24 мая 2018

В JavaScript вы можете использовать [^], что, в отличие от ., также совпадает с символами новой строки.

В Java самый простой способ сделать . соответствующим любому символу, включая символы новой строки, будетиспользовать флаг Pattern.DOTALL (см. руководство ), но если вы не можете использовать флаги с Pattern.compile(), как вы сказали, вы должны написать их внутри регулярного выражения.

Вот ваше регулярное выражение с добавленным флагом s (однострочный) (==Pattern.DOTALL), и поскольку мы здесь, флаг i (без учета регистра) (==Pattern.CASE_INSENSITIVE) тоже, так как он, скорее всего, вам понадобитсяа также:

(?si:<pre><code>(.*?)<\/code><\/pre>)

Обратите внимание, что внешняя группа здесь - это группа без захвата (она не будет влиять на количество групп).

Что касается пробелов, они ненужна специальная обработка в регулярном выражении, как это делают переводы строкВ Java самый простой способ удалить начальные и конечные пробелы (включая переводы строк) из захваченного String, это .trim() it.

0 голосов
/ 24 мая 2018

Использовать <pre><code>\s*(.+?)\s*<\/code><\/pre> регулярное выражение с параметром s (однострочный) (и, возможно, g тоже),

Подробности:

  • <pre><code> - Открытиеpre и code теги.
  • \s* - начальные пробелы (на самом деле белые символы), если таковые имеются.
  • (.+?) - блок кода для захвата (примечание ?- версия с неохотой).
  • \s* - пробелы, если таковые имеются.
  • <\/code><\/pre> - закрывающие теги pre и code.

Благодаря опции s группа захвата будет также соответствовать \n символам внутри любого блока кода.

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