Avatar billede thomasabcd Nybegynder
16. februar 2008 - 10:01 Der er 12 kommentarer og
1 løsning

Finde html-tags med bestemt css klasse

Hvordan laver jeg en regex, som finder alle html-tags med en bestemt cssklasse? Eksempelvis vil jeg gerne finde alle html-tags med cssklassen "selected" ? Jeg vil gerne have både tagget og indholdet, dvs. <TAG class="seleced">bla bla</TAG>

På forhånd tak
Avatar billede nielle Nybegynder
16. februar 2008 - 10:12 #1
Sådan?

<([^>]+class="seleced"[^>]*)>
Avatar billede nielle Nybegynder
16. februar 2008 - 10:12 #2
... eller:

(<[^>]+class="seleced"[^>]*>)
Avatar billede thomasabcd Nybegynder
16. februar 2008 - 10:31 #3
Hej nielle,

er det muligt at matche et tag på "selected" selvom tagget måtte have flere cssklasser? Lad os sige, at jeg gerne vil finde følgende tag: <span class="selected frontpage">bla bla</span> eller <span class="frontpage selected">bla bla</span>

dvs. "selected" kan stå på forskellige steder i class og optræder ikke nødvendigvis alene
Avatar billede nielle Nybegynder
16. februar 2008 - 10:53 #4
Et bud:

(<[^>]+class="[^"]*?\bseleced\b[^"]*"[^>]*>)
Avatar billede thomasabcd Nybegynder
16. februar 2008 - 11:04 #5
Hm... kan ikke helt få det til at virke.
Min kode:
string tagExpression="(<[^>]+class=\"[^\"]*?\bselected\b[^\"]*\"[^>]*>)";
string div="<span class=\"frontpage selected\">bla bla</span>";

MatchCollection tags = Regex.Matches(div.ToLower(), tagExpression, RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.IgnoreCase);
foreach (Match tag in tags)
{
  System.Diagnostics.Debug.WriteLine(tag.Value);
}

Nogle idéer?

På forhånd tak
Avatar billede nielle Nybegynder
16. februar 2008 - 11:19 #6
I C# skal du også huske at excape \-tegn som er til regexop'en - ellers prøver C# selv at fortolke dem i string-sammenhængen:

string tagExpression = "(<[^>]+class=\"[^\"]*?\\bselected\\b[^\"]*\"[^>]*>)";

... eller:

string tagExpression = @"(<[^>]+class=""[^""]*?\bselected\b[^""]*""[^>]*>)";
Avatar billede thomasabcd Nybegynder
16. februar 2008 - 11:41 #7
hej,

det virker rigtigt godt! Mange tak for hjælpen. Smid et svar
Avatar billede nielle Nybegynder
16. februar 2008 - 11:42 #8
Svar :^)
Avatar billede nielle Nybegynder
16. februar 2008 - 11:42 #9
...
Avatar billede thomasabcd Nybegynder
16. februar 2008 - 12:32 #10
er det egentligt muligt at "rense" resultatet for andre htmltags?

Det endte med, at min regex ser således ud:
string baseExpression = "(<[^>]+class=\"[^\"]*?\\bselected\\b[^\"]*\"[^>]*>)(.*?)</";
Jeg hiver alle match ud:
MatchCollection tags = Regex.Matches(html.ToLower(), tagExpression, RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.IgnoreCase);

den finder alle tags med "selected" i css-klassen og hiver også indholdet ud indtil tagget afsluttes.

Nogle af mine resultater indeholder dog "<br />" (eksempelvis hvis htmlen er <span class="frontpage selected">bla <br /> bla</span>.

Kan regex laves så den IKKE også hiver indlejrede tags ud (eks <br />) ?
Avatar billede nielle Nybegynder
16. februar 2008 - 20:04 #11
Hvis du ønsker at bruge det der mønster, så tvinger du den jo til at matche alt indlejret tekst med - inkl. eventuelle tags.

Jeg kan ikke helt se hvorfor at du har taget den sidste del med ... specielt eftersom at du alligevel ikke matcher hele slut-taggen med (men kun lige starten af den)?
Avatar billede thomasabcd Nybegynder
17. februar 2008 - 20:36 #12
hej,

jeg vil gerne have alt med i mellem start- og slut-tagget og "</" markerer slutningen af tagget, så derfor tager jeg det med. Det er indholdet og ikke tagget selv, jeg gerne vil hive ud i sidste ende.
Avatar billede nielle Nybegynder
18. februar 2008 - 17:31 #13
Men så får du jo også automatisk eventuelle indlejrede tags med. :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester