2016-03-22 2 views
1

Простого регулярное выражение вопрос ..Регулярное выражение между двумя словами - или до конца строки?

У меня есть очень простое выражение построено, чтобы вытащить текст между двумя словами:

BEGN: (.*?)DETAIL: 

Который работает хорошо, когда есть оба слова, но в некоторых случаях там нет «ДЕТАЛИ : «поэтому в тех случаях я просто хочу зафиксировать до конца текста. Возможно ли это с одним выражением или мне нужна условная инструкция какого-либо типа?

ответ

2

Если завершающий разделитель может отсутствовать, использовать tempered greedy token или раскатали один:

BEGN: ((?:(?!DETAIL:).)*) 

увидеть regex demo

The (?:(?!DETAIL:).)* матчи любой текст до первого DETAIL:. Вы можете добавить слово границы \b до D, так что только DETAIL это целое слово.

Если текст может охватывать несколько строк, не забудьте модификатор DOTALL. Если вы используете развернутую версию, модификатор DOTALL не требуется:

BEGN: ([^D]*(?:D(?!ETAIL:)[^D]*)*) 

См another demo

+1

BRILLIANT. Отлично работает, спасибо. – Roger

+0

Рад помочь, пожалуйста, подумайте о принятии ответа. –

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