Avatar billede enggaard Nybegynder
06. februar 2009 - 14:55 Der er 4 kommentarer og
1 løsning

hyperlink formatering

Hej.

Jeg har et metode i ASP.NET 3.5 som formaterer links en en input streng fra

<a href="url">link</a>

til

<a href="url"><font color="farve">link</font></a>

Code:
=================================================
private static string FixLinks(string source)
{
    string LinkTemplate = "<a href=\"{0}\"><font color=\"{2}\">{1}</font></a>";
    string RegExMatchString = @"<a.*href=[""'](?<url>[^""^']+[.]*)[""'].*>(?<name>[^<]+[.]*)</a>";
    string result = source;

    MatchCollection matches = Regex.Matches(source, RegExMatchString, RegexOptions.IgnoreCase);
    foreach (Match match in matches)
    {
        if (match.Success)
        {
            string newLink = string.Format(LinkTemplate, match.Groups["url"], match.Groups["name"], "#FF0000");
            result = result.Replace(match.Value, newLink);
        }
    }
    return result;
}
=========================================


Problemet er at når der er flere links i input tekst, så gør den følgende:


Fra:
bla bla bla <a href="url1">link1</a> bla bla bla <a href="url2">link2</a>

Til:
<a href="url1"><font color="farve">link2/font></a>

Altså <A> tag fra første link sat sammen med selve link tekst og </A> tag fra sidste link.

Eventuelle links mellem første og sidste forsvider helt.

Det er tydeligvis mit regexp den er gal med, jeg mener jeg fandt det på nettet et sted og rettede det lidt til.

Men jeg har ikke viden nok om regexp til at kunne finde ud af hvad det skal ændres til for at få den ønskede effekt.
Avatar billede nicklasb Nybegynder
07. februar 2009 - 18:42 #1
Jeg er ikke helt sikker på, hvad det er du vil. Men ud fra dit eksempel, kunne jeg forstille mig at problemet er at regulære udtryk som oftest er grådige. Desuden har du ikke escaped stråstregen i </a>.

Prøv med
<a.*?href=[""'](?<url>[^""^']+[.]*)[""'].*?>(?<name>[^<]+[.]*)<\/a>
i stedet.
Avatar billede enggaard Nybegynder
09. februar 2009 - 09:48 #2
Lidt baggrund:
html strengen skal vises i et flash komponent. Af den ene eller anden årsag der for mig er uvis (det er ikek mig der arbejder på flash delen) så kan vores flash mand ikke få flashen til at vise links med anden farve end den normale tekst farve.

Derfor forsøger jeg at smide et <font> tag med den ønskede farve ind i links før de sendes til flash komponentet.

Så det jeg ønsker er at alle links i input strengen skal laves om fra

<a ...>link</a> til <a ...><font ...>link</font></a>
Avatar billede nicklasb Nybegynder
09. februar 2009 - 18:13 #3
Og hvad melder den jeg postede af fejl?

Hvis jeg prøver med en teststreng som følger:
test <a href="foo">bar</a> test <a href="baz">bum</a> test

får jeg to resultater, henholdsvis

Match                | $1  | $2
<a href="foo">bar</a> | foo | bar
<a href="baz">bum</a> | baz | bum

Kan du eventuelt prøve at poste et rigtigt eksempel på dit input?
Avatar billede enggaard Nybegynder
10. februar 2009 - 09:09 #4
Fantastisk Nicklas.

Mange tak.

Det virker, det gjorde det faktisk også efter din første kommentar, jeg havde bare lavet noget test kode der overskrev svaret som jeg havde glemt at fjerne igen... D'oh.

Smid et svar, så kommer der point i din retning :)
Avatar billede nicklasb Nybegynder
10. februar 2009 - 09:44 #5
:)
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