2009-06-29 14 views
2

Ich verwende die folgende Regex, um den Wert src des ersten Tags img in einem HTML-Dokument zu erhalten.Regex, um src-Wert von einem img-Tag zu erhalten

string match = "src=(?:\"|\')?(?<imgSrc>[^>]*[^/].(?:jpg|png))(?:\"|\')?" 

Jetzt erfasst es insgesamt src Attribut, das ich nicht brauche. Ich brauche nur die URL innerhalb des src Attributs. Wie es geht?

Antwort

6

Analysieren Sie Ihren HTML-Code mit etwas anderem.HTML is not regular und daher sind reguläre Ausdrücke überhaupt nicht zum Parsen geeignet.

Verwenden Sie einen HTML-Parser oder einen XML-Parser, wenn der HTML-Code strikt ist. Es ist viel einfacher, das src-Attribut den Wert mit XPath zu bekommen:

//img/@src 

XML-Analyse in die System.Xml namespace gebaut wird. Es ist unglaublich mächtig. HTML parsing ist ein bisschen schwieriger, wenn der HTML-Code nicht streng ist, aber es gibt viele Bibliotheken, die es für Sie tun.

+2

er ist nicht auf der Suche nach HTML zu analysieren, sondern einfach einen Wert aus einer einzigen Art von Tag in HTML zu extrahieren. Regexes zeichnen sich in dieser Hinsicht aus. –

+1

@eqbridges: Die Tatsache, dass die Regex, die er sich ausgedacht hat, so kompliziert ist, ist ein Hinweis darauf, dass es der falsche Weg ist, das Problem anzugehen. Dann gibt es die Tatsache, dass es nicht alle möglichen Werte für die src Attribute (dh diejenigen mit 'oder ") übereinstimmen. Analysieren Sie HTML/XML nicht auf diese Weise! Tun Sie es nicht! – Welbog

+1

@Welbog - wenn er Ich brauche nur einen Wert von der img src, ich stimme dem nicht zu: Ein HTML-Parser für eine Aufgabe wie diese ist zu viel. Wenn er etwas besonders Komplexes tun muss, würde ich eher zustimmen. –

1

Ihre Regex sollte (in Englisch) auf jedes Zeichen nach einem Zitat passen, das ist kein Zitat innerhalb eines Tags auf dem Attribut src.

In Perl regex, würde es so sein:

/src=[\"\']([^\"\']+)/ 

Die URL in $1 wird dies nach dem Laufen.

Dies setzt natürlich voraus, dass die URLs in Ihren src-Attributen zitiert werden. Sie können die Werte in den Klammern [] entsprechend ändern, wenn dies nicht der Fall ist.

+0

Arbeitete wunderbar für mich Meine Anforderung war einfach eine Sub-String mit einem sehr spezifischen Muster zu extrahieren. Die Tatsache, dass die Quellzeichenfolge zufällig HTML ist, ist irrelevant. Ich versuche nicht, HTML zu analysieren, und ich stimme den obigen Kommentaren zu, dass das Auspeitschen eines vollständigen HTML-Parsers für diese einfache Aufgabe übertrieben ist. – djskinner

Verwandte Themen