Avatar billede hyperactive Nybegynder
21. april 2004 - 19:44 Der er 11 kommentarer og
1 løsning

Regular expression hjælp!

"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"><html><head><title>Untitled Document</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\"></head><body><a href=\"thumbs/test2.jpg\"><img src=\"thumbs/test2.jpg\" width=\"120\" height=\"100\" border=\"0\"></a><a href=\"test.htm\"><img src=\"graphics/test.jpg\" width=\"120\" height=\"100\" border=\"0\"></a> <a href=\"fullsize/test.jpg\"><img src=\"thumbs/test.jpg\" width=\"393\" height=\"53\" border=\"0\"></a> </body></html>"

Jeg har brug for en regular expression, der kan finde samtlige billeder, der linker til billeder i en string som ovenstående...

I ovennævnte string skal den således returnere:

<a href=\"thumbs/test2.jpg\"><img src=\"thumbs/test2.jpg\" width=\"120\" height=\"100\" border=\"0\"></a>
<a href=\"fullsize/test.jpg\"><img src=\"thumbs/test.jpg\" width=\"393\" height=\"53\" border=\"0\"></a>

Men ikke:

<a href=\"test.htm\"><img src=\"graphics/test.jpg\" width=\"120\" height=\"100\" border=\"0\"></a>

da den linker til en html fil.

Den skal selvfølgelig også kunne anvendes hvis strengen indeholder en anden html kode.... det er mest for at illustrere formatet...
Avatar billede arne_v Ekspert
22. april 2004 - 22:12 #1
using System;
using System.Text.RegularExpressions;

class MainClass
{
    public static void Main(string[] args)
    {
        string s = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"><html><head><title>Untitled Document</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\"></head><body><a href=\"thumbs/test2.jpg\"><img src=\"thumbs/test2.jpg\" width=\"120\" height=\"100\" border=\"0\"></a><a href=\"test.htm\"><img src=\"graphics/test.jpg\" width=\"120\" height=\"100\" border=\"0\"></a> <a href=\"fullsize/test.jpg\"><img src=\"thumbs/test.jpg\" width=\"393\" height=\"53\" border=\"0\"></a> </body></html>";
        MatchCollection res = Regex.Matches(s,"<a href=\"[^\"]*\\.jpg\"><img src=\"[^\"]*\"[^>]*></a>");
        for(int i = 0; i < res.Count; i++) {
            Console.WriteLine(res[i]);
        }
    }
}
Avatar billede hyperactive Nybegynder
24. april 2004 - 12:11 #2
Hej Arne...

Tak for forslaget.... Men jeg kan ikke få det til at virke.... Har prøvet den i Expresso (http://www12.brinkster.com/ultrapico/Expresso.htm) uden held
Avatar billede arne_v Ekspert
24. april 2004 - 12:33 #3
Når jeg kører ovenstående program as is på min PC får jeg:

<a href="thumbs/test2.jpg"><img src="thumbs/test2.jpg" width="120" height="100" border="0"></a>
<a href="fullsize/test.jpg"><img src="thumbs/test.jpg" width="393" height="53" border="0"></a>

hvilket ser rigtigt ud for mig.
Avatar billede arne_v Ekspert
24. april 2004 - 12:33 #4
Jeg kender ikke Expresso.

Men er det ikke vigtigere at det virker i C# end i Expresso ?
Avatar billede hyperactive Nybegynder
25. april 2004 - 17:36 #5
Yep... OK.... så virker det.... En lille ting mere....

Hvis nu der er en target="_blank" eller lign. i href eller der er mellemrum før <img src...> så fanger den dem ikke
Avatar billede arne_v Ekspert
25. april 2004 - 17:38 #6
Skal jeg lave en version hvor det også virker ?
Avatar billede hyperactive Nybegynder
25. april 2004 - 17:42 #7
Hvis du gider
Avatar billede hyperactive Nybegynder
25. april 2004 - 17:42 #8
og hvis det ikke er for stort besvær....
Avatar billede arne_v Ekspert
25. april 2004 - 17:44 #9
giv mig 10 minutter
Avatar billede arne_v Ekspert
25. april 2004 - 17:50 #10
Den her håndterer lige præcis de 2 tilfælde:

using System;
using System.Text.RegularExpressions;

class MainClass
{
    public static void Main(string[] args)
    {
        string s = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"><html><head><title>Untitled Document</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\"></head><body><a href=\"thumbs/test2.jpg\" target=\"_blank\"><img src=\"thumbs/test2.jpg\" width=\"120\" height=\"100\" border=\"0\"></a><a href=\"test.htm\"><img src=\"graphics/test.jpg\" width=\"120\" height=\"100\" border=\"0\"></a> <a href=\"fullsize/test.jpg\">  <img src=\"thumbs/test.jpg\" width=\"393\" height=\"53\" border=\"0\"></a> </body></html>";
        MatchCollection res = Regex.Matches(s,"<a href=\"[^\"]*\\.jpg\"[^>]*>[^<]*<img src=\"[^\"]*\"[^>]*></a>");
        for(int i = 0; i < res.Count; i++) {
            Console.WriteLine(res[i]);
        }
    }
}
Avatar billede arne_v Ekspert
25. april 2004 - 17:51 #11
Der kan sikkert broderes videre på den for at håndtere andre muligheder.
Avatar billede hyperactive Nybegynder
25. april 2004 - 18:10 #12
Perfekt.... tak
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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