Начиная с объяснения ... переходите к концу для быстрых ответов
Чтобы сопоставить определенный фрагмент текста и подтвердить, что он есть, но не включить его в совпадение, вы можете использовать положительный прогноз, используя нотацию (?=regex)
Это подтверждает, что 'regex' существует в этой позиции, но соответствует только начальной позиции, а не ее содержимому.
Итак, это дает нам выражение:
.*?(?=All text before this line will be included)
Где .
- любой символ, а *?
- ленивое совпадение (потребляет наименьшее возможное количество по сравнению с обычным *
, который потребляет наибольшее возможное количество).
Однако почти во всех разновидностях регулярных выражений .
исключает символ новой строки, поэтому нам нужно явно использовать флаг для включения символов новой строки.
Используемый флаг - s
(что означает «однострочный режим», хотя в некоторых вариантах он также называется режимом «DOTALL»).
И это может быть реализовано различными способами, включая ...
Глобально, для регулярных выражений на основе /:
/regex/s
Встроенное, глобальное для регулярного выражения:
(?s)regex
Встроенный, применяется только к части в скобках:
(?s:reg)ex
И в качестве аргумента функции (зависит от того, с каким языком вы используете регулярное выражение).
Итак, вероятно, вы хотите следующее регулярное выражение:
(?s).*?(?=All text before this line will be included)
Однако есть несколько предостережений:
Во-первых, не все разновидности регулярных выражений поддерживают ленивые квантификаторы - возможно, вам придется использовать только .*
(или потенциально использовать более сложную логику в зависимости от точных требований, если «Весь текст до ...» может появляться несколько раз).
Во-вторых, не все разновидности регулярных выражений поддерживают просмотр, поэтому вместо этого вам нужно использовать захваченные группы, чтобы получить текст, который вы хотите сопоставить.
Наконец, вы не всегда можете указывать флаги, такие как s
выше, поэтому может потребоваться либо сопоставить «что-нибудь или новую строку» (.|\n)
или, возможно, [\s\S]
(пробел, а не пробел), чтобы получить эквивалент согласование.
Если вы ограничены всеми этими (я думаю, что реализация XML), то вам придется сделать:
([\s\S]*)All text before this line will be included
А затем извлечь первую подгруппу из результата матча.