2015-12-02 2 views
0

Я пытаюсь написать регулярное выражение (который никогда не является хорошей идеей для меня, чтобы попробовать), которая находит образец новой строки, что не следует символ <Regex найти новые строки не следует символ

Таким образом, шаблон будет соответствовать этой строке один раз: some text\nsome more text\n<end of file>

Любая помощь?

+0

'\ n (?! <)'. Это называется отрицательным прогнозом. – eph

+0

@eph Спасибо, как за ответ, так и за терминологию, чтобы я мог найти учебник для этого – Scotty

+0

@Scotty, которому нужны учебники, когда у вас есть стек :) Если что-то нуждается в разъяснении или регулярное выражение не работает, просто скажите, и я я уверен, что вы получите ответ. Кроме того, текст, который вы сопоставляете, кажется немного надуманным, учитывая, что (? S). * На самом деле соответствует тому, что вы просили. Поэтому, возможно, добавление примера более реальной жизни поможет, если ответы ниже не будут выполнены, что вы были после – swestner

ответ

0

Это должно работать

(?s).*(?=<) 

Выражение (? S) переходит в режим одной линии, что позволяет. для соответствия новым строкам, а положительный результат позволяет выражению остановиться на <, не потребляя его (т. е. добавляя его в соответствие)

Следует помнить, что * жадный, то есть он будет останавливаться в последнем матче, а не в первом. Поэтому, если у вас есть <end of file> дважды в том же файле, он будет соответствовать всем текстам до второго.

Если вы хотите, чтобы поймать повторяющиеся ВФ теги (с ВФ тега), вы могли бы сделать что-то вроде этого

(?s)([^>]+>) 

Или без тегов ВФ

(?s)([^<]+)(?:[^>]+>) 

В обоих случаях мы используем отрицательный класс символов для соответствия любому символу, кроме < или>. Мы останавливаемся, когда один из них попал, и начнем новый матч.

Смежные вопросы