2016-04-15 22 views
0

Ich bin nicht mit regulären Ausdrücken vertraut. Ich versuche es zu verstehen, aber es ist schwierig.Fügen Sie einem vorhandenen Ausdruck einen weiteren regulären Ausdruck hinzu

Ich habe einen regulären Ausdruck, der jede URL in einem Anchor-Tag umschließt. Es werden jedoch auch URLs umschlossen, die sich bereits in einem Anchor-Tag befinden. Ich möchte das verhindern, also habe ich einen regulären Ausdruck gefunden, der das für mich tut.

?![^<]*</a> 

Allerdings habe ich keine Ahnung, wie ich dies zu meinem bestehenden regulären Ausdruck hinzufügen würde. Das ist mein derzeitiger regulärer Ausdruck:

Also, wie kann ich eine URL überspringen, die bereits in einem Anker-Tag verpackt ist?

+0

Bitte löschen Sie Ihre Frage mit weiteren Details. –

Antwort

1

Ich werde dem Chor beitreten und sagen: Verwenden Sie keine Regex für diese - verwenden Sie einen HTML-Parser.

Das sagte - die Regex Sie gefunden ist nicht wirklich ein Regex in sich. Es ist Teil eines negativen Look-Ahead, dass Art von prüft, ob Sie nicht in einem Anker sind. (Es sollte wirklich (?![^<]*</a>) sein.) Es überprüft, dass folgende Text bis zur nächsten < (oder das Ende) nicht von </> gefolgt wird.

Wenn Sie dies an das Original Ihres RE anschließen, wird manchmal den Trick machen. Ich werde keine Zeit damit verbringen, an Situationen zu denken, in denen es scheitern wird - aber das wird es wahrscheinlich tun.

Zusammen mit einigen Vereinfachungen Ihre regex sollte wie folgt aussehen:

(https?:\/\/[-\wа-яА-Я()@:%+.~#?&;\/=]+)(?![^<]*<\/a>) 

Dies ist wahrscheinlich für Sie arbeiten meist, aber wahrscheinlich wird auch manchmal scheitern.

Grüße

+0

Okay, danke. Ich werde stattdessen für einen HTML-Parser gehen. – stefan1294