2017-08-31 4 views
-1

Ich versuche, eine Regex zu erstellen, um alle eine href Links, die meine Domäne enthalten, und ich werde am Ende die Links entfernen. Es funktioniert gut, bis ich in einen Link a href, der ein anderes HTML-Tag innerhalb des Tags hat.Regex-Muster zu A Href und Entfernen

Regex Statement:

(<a[^<]*coreyjansen\.com[^<]*>)([^"]*?)(<\/a>) 

Es bringt die a href Links in dieser Aussage kein Problem

Need a lawyer? Contact <span style="color: #000000"><a 
href="http://coreyjansen.com/">Random text is great</a> <a 
href="http://coreyjansen.com/practice/family/">Corey is awesome</a></span> 

Es ist nicht in der Lage dies sowohl der a href Links entsprechen Aussage:

<strong><a href="http://coreyjansen.com/"><img class="alignright size-full 
wp-image-12" src="http://50h0.com/wp-content/uploads/2014/06/lawyers.jpg" 
alt="lawyers" width="250" height="250" /></a> 

Ich habe versucht, mit dem vernachlässigten Zeichensatz ohne Glück zu spielen. Wenn ich den vernachlässigten Zeichensatz entferne, werden zwei aufeinanderfolgende Links wie Beispiel 2 als eine Übereinstimmung gefunden.

+1

Verwenden Sie stattdessen einen Parser für Ihre Programmiersprache! – Jan

+0

Statt durch HTML-Tags zu suchen, warum Sie nicht für Ihre Domain im gesamten HTML-Code suchen und dann entscheiden (manuell), die Links zu tun und gehört nicht. Dies verhindert, dass Sie einen Parser benötigen und auch Dinge wie Javascript, Umleitungen, CSS Links, Image-Tags fangen, usw. – ctwheels

Antwort

0

Das Problem hier ist, dass [^<]*> alles bis zuletzt > entspricht. Das ist das gierige Verhalten von * asterisk. Sie können es nicht gierig machen, indem Sie ? nach dem Stern anhängen (was Sie bereits in einem anderen Teil Ihrer Abfrage tun). Es wird dann alles bis zum ersten Auftreten von > übereinstimmen. Dann müssen Sie auch den mittleren Teil Ihrer Regex ändern, dh. zu fangen alles bis zum ersten Tag </a> wie folgt aus:

(<a[^<]*coreyjansen\.com[^<]*?>)(.*?)(<\/a>) 
+0

Das genial gearbeitet. Jetzt mit dem letzten Spiel versuche ich, es issolate so kann ich die A href entfernen und das ist der Ausdruck, den ich bin mit '/href\s*=\s*[\'|"]\s*(.* \) s * [\ '| "]/I' jedoch nun außerhalb des a href Tages – MrToast

0

ich mit der folgenden regex bin zu spielen und es scheint zu funktionieren:

<a.*coreyjansen\.com.*</a> 

es fängt alles zwischen Anker-Tags, die Ihre Site-Namen enthalten . Ich verwende Javascript Muster von www.regexpal.com passend, abhängig von der Sprache könnte es etwas anders

0

Verwendung unter regex sein, die nur Spiele a Tag

(<a[^>]*coreyjansen\.com[^>]*>) 

Beispieldaten

<strong><a href="http://coreyjansen.com/"><img class="alignright size-full 
wp-image-12" src="http://50h0.com/wp-content/uploads/2014/06/lawyers.jpg" 
alt="lawyers" width="250" height="250" /><a href="http://coreyjansen.com/"><a href="http://coreyjansen.com/"/></a> 

Über Regex werden alle drei a Tags mit Ihrer gewünschten Domain übereinstimmen.

Versuchen Sie oben auf regex

0

Sie müssen vor > char-Adresse übereinstimmen <a dann Anfang Schild entsprechen. Sie stimmen falsches Zeichen ab. Wenn Sie das übereinstimmen, dann ist Everything zwischen <a> und </a> Link angezeigt. Ich weiß nicht, warum Sie vergleichen, keine Anführungszeichen zu enthalten, jedes Tag-Attribut (in HTML5) hat einen Wert in Anführungszeichen, also müssen Sie alles außer dem Link-End-Tag </a> abgleichen. Es ist getan von ((?!string to not match).)* und danach sollte </a> folgen. Das Ergebnis Regex ist:

(<a[^>]*coreyjansen\.com[^>]*>)((?!<\/a>).)*(<\/a>)