2016-03-22 17 views
1

Einfache Regex Frage ..Regex zwischen zwei Wörtern - oder zum Ende der Zeile?

Ich habe einen sehr einfachen Ausdruck gebaut Text zwischen zwei Wörtern ziehen:

BEGN: (.*?)DETAIL: 

der gut arbeitet, wenn beide Wörter existieren, aber bei einigen Gelegenheiten gibt es keine „DETAIL : "In diesen Fällen möchte ich nur bis zum Ende des Textes erfassen. Ist das mit einem einzelnen Ausdruck möglich, oder brauche ich eine bedingte Anweisung eines Typs?

Antwort

2

Wenn der hintere Begrenzungszeichen fehlen können, verwenden Sie eine tempered greedy token oder ein entrollt:

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

ein regex demo

Die (?:(?!DETAIL:).)* Matches einen beliebigen Text bis zum ersten DETAIL: See. Sie können eine Wortgrenze \b vor hinzufügen, um nur DETAIL zu entsprechen, das ein ganzes Wort ist.

Wenn der Text sich über mehrere Zeilen erstrecken kann, vergessen Sie nicht den Modifikator DOTALL. Wenn Sie eine abgerollt Version verwenden, wird der DOTALL Schlüssel nicht benötigt:

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

Siehe another demo

+1

BRILLIANT. Funktioniert perfekt, danke. – Roger

+0

Froh, zu helfen, bitte in Betracht ziehen, die Antwort zu akzeptieren. –

Verwandte Themen