Hej! Det framgår inte exakt vad som kan variera. Det borde väl funka med något i stil med: Det som kan variera är ordningen i vilken attributen står. Så här fick det blir: RegExen ovan visade sig inte alls fungera nå bra.Matcha -tag
Jag försöker hitta en <link>-tag på en hemsida (vilken hemsida som helst egentligen) som ser ut så här:
<link type="application/rsd+xml" rel="edituri" title="RSD" href="http://url.se/rsd.axd" />
Jag är ute efter href-attributet för att läsa in XMLen som finns på den URIn. Problemet som jag inte riktigt kommer runt är att attributen ju kan komma i vilken ordning som helst och att det kan finnas flera <link>-taggar. Det är viktigast att type- och rel-attributen stämmer med värderna ovan.
Någon som har något förslag på ett reguljärt uttryck som kan fungera? Gärna något som går att köra i .NET.
Reguljära uttryuck är tyvärr itne min starka sida, så en liten knuff åt rätt håll eller ett helt uttryck är mycket uppskattat! Eller finns det något bättre/enklare sätt att få fram den här URIn?
Tack på förhand!
Sv: Matcha -tag
<link ((type="application/rsd+xml" )|(rel="edituri" )|(title="RSD" ))*href=".*" ((type="application/rsd+xml" )|(rel="edituri" )|(title="RSD" ))*/>
Men då måste du efteråt kontrollera att den verkligen innehöll alla taggar (och du måste nog ställa in att .* inte ska vara greedy etc.)
En annan variant är att ta alla tänkbara kombinationer, det blir 6 stycken om du bara bryr dig om href, rel och type.
typ
<link (type="app..."[^>]*rel="edituri"[^>]*href=".*") | (rel="edituri"[^>]*type="app..."[^>]*href=".*") | ... |
[^>]*/>
Jag tror det enklaste är att plocka ut alla tänkbara matchningar och sen i kod kolla vilka som är korrekta.Sv:Matcha -tag
Jag ska testa dina förslag och bygga vidare på de, ser ut att kunna fungera.
Hör av mig om det är några fler frågor.
Tack så länge!Sv: Matcha -tag
<code>
<link[^>]?(rel="(?<rel>.*?)"[^>]type="(?<type>.*?)"[^>]href="(?<href>.*?)")|(rel="(?<rel>.*?)"[^>]href="(?<href>.*?)"[^>]type="(?<type>.*?)")|(type="(?<type>.*?)"[^>]rel="(?<rel>.*?)"[^>]href="(?<href>.*?)")|(type="(?<type>.*?)"[^>]href="(?<href>.*?)"[^>]rel="(?<rel>.*?)")|(href="(?<href>.*?)"[^>]type="(?<type>.*?)"[^>]rel="(?<rel>.*?)")|(href="(?<href>.*?)"[^>]rel="(?<rel>.*?)"[^>]type="(?<type>.*?)")[^>]/?>
</code>
Matchar alla <link>-taggar som har rel-, type- och href-attributen vilket de flesta har, så kan jag bara kolla igenom alla träffar efter rätt type och rel.
Verkar fungera ganska bra också.
Tack så hemskt mycket för hjälpen!Sv:Matcha -tag
Däremot gör den här det :)
<code><link[^>]*
([^>]*?rel="(?<rel>[^>"]*?)"[^>]*?type="(?<type>[^>"]*?)"[^>]*?href="(?<href>[^>"]*?)"[^>]*?)|
([^>]*?rel="(?<rel>[^>"]*?)"[^>]*?href="(?<href>[^>"]*?)"[^>]*?type="(?<type>[^>"]*?)"[^>]*?)|
([^>]*?type="(?<type>[^>"]*?)"[^>]*?rel="(?<rel>[^>"]*?)"[^>]*?href="(?<href>[^>"]*?)"[^>]*?)|
([^>]*?type="(?<type>[^>"]*?)"[^>]*?href="(?<href>[^>"]*?)"[^>]*?rel="(?<rel>[^>"]*?)"[^>]*?)|
([^>]*?href="(?<href>[^>"]*?)"[^>]*?type="(?<type>[^>"]*?)"[^>]*?rel="(?<rel>[^>"]*?)"[^>]*?)|
([^>]*?href="(?<href>[^>"]*?)"[^>]*?rel="(?<rel>[^>"]*?)"[^>]*?type="(?<type>[^>"]*?)"[^>]*?)
/?></code>