Avatar billede basementjack Nybegynder
20. januar 2005 - 14:57 Der er 16 kommentarer og
1 løsning

[link=www.noget.dk]Linky[/link

Hej alle

Jeg skal bruge to RegularExpressions og en måde at bruge dem på.
Skal oversætte [link=www.noget.dk]Linky[/link] til et alm. link.
Har kigget på http://www.eksperten.dk/spm/581385
Problemet er at jeg ikke ved hvordan man anvender Expressions i Asp.Net(C#/Vb.Net), og fordi at jeg også skal kunne gå fra et alm. link til [link=www.noget.dk]Linky[/link] igen.

På forhånd tak.
Avatar billede arne_v Ekspert
20. januar 2005 - 15:02 #1
Der var et spørgsmål meget ligesom dit for ike så lang tid
siden.

Jeg lavede denne kode:

Imports System
Imports System.Text
Imports System.Text.RegularExpressions

Public Class HtmlManip
    Public Shared Sub Main(ByVal args As String())
        Test("[url]http://www.exp.dk[/url]")
        Test("Tryk Her")
        Test("bla [url]http://www.exp.dk[/url] bla Tryk Her bla")
    End Sub

    Private Shared Sub Test(ByVal s As String)
        Console.WriteLine(s)
        Console.WriteLine(LinkCreate(s))
    End Sub

    Public Shared Function LinkCreate(ByVal s As String) As String
        Return LinkCreate2(LinkCreate1(s))
    End Function

    Public Shared Function LinkCreate1(ByVal s As String) As String
        Dim m As Match = Regex.Match(s, "(.*?)(?:\[url\])(.*?)(?:\[/url\])(.*)", RegexOptions.Singleline)
        If m Is Match.Empty Then
            Return s
        Else
            Return m.Groups(1).ToString & "<a href='" & m.Groups(2).ToString & "'>" & m.Groups(2).ToString + "</a>" & LinkCreate(m.Groups(3).ToString)
        End If
    End Function

    Public Shared Function LinkCreate2(ByVal s As String) As String
        Dim m As Match = Regex.Match(s, "(.*?)(?:\[url=)(.*?)(?:\])(.*?)(?:\[/url\])(.*)", RegexOptions.Singleline)
        If m Is Match.Empty Then
            Return s
        Else
            Return m.Groups(1).ToString & "<a href='" & m.Groups(2).ToString & "'>" & m.Groups(3).ToString + "</a>" & LinkCreate(m.Groups(4).ToString)
        End If
    End Function
End Cl
Avatar billede arne_v Ekspert
20. januar 2005 - 15:03 #2
Du skal vist stort set kun rette "url" til "link" for at du kan bruge LinkCreate2 !
Avatar billede basementjack Nybegynder
20. januar 2005 - 15:17 #3
Har oversat til C# og ændret url til link, lavet alle \ om til \\, jeg får en fejl når jeg vil complie om en escape.. Nogen ide om hvorfor?.. Og så vil jeg lige spørge hvorfor funktionerne er Shared/static?..

    using System;
    using System.Text;
    using System.Text.RegularExpressions;
    public class Links
    {
        public static void Main(string[] args)
        {
            Test("[url]http://www.exp.dk[/url]");
            Test("Tryk Her");
            Test("bla [url]http://www.exp.dk[/url] bla Tryk Her bla");
        }
        private static void Test(string s)
        {
            Console.WriteLine(s);
            Console.WriteLine(LinkCreate(s));
        }
        public static string LinkCreate(string s)
        {
            return LinkCreate2(LinkCreate1(s));
        }
        public static string LinkCreate1(string s)
        {
            Match m = Regex.Match(s, "(.*?)(?:\\[link\\])(.*?)(?:\\[/link\\])(.*)", RegexOptions.Singleline);
            if (m == Match.Empty) {
                return s;
            } else {
                return m.Groups(1).ToString + "<a href='" + m.Groups(2).ToString + "'>" + m.Groups(2).ToString + "</a>" + LinkCreate(m.Groups(3).ToString);
            }
        }
        public static string LinkCreate2(string s)
        {
            Match m = Regex.Match(s, "(.*?)(?:\\[link=)(.*?)(?:\\])(.*?)(?:\\[/link\\])(.*)", RegexOptions.Singleline);
            if (m == Match.Empty) {
                return s;
            } else {
                return m.Groups(1).ToString + "<a href='" + m.Groups(2).ToString + "'>" + m.Groups(3).ToString + "</a>" + LinkCreate(m.Groups(4).ToString);
            }
        }
    }
Avatar billede arne_v Ekspert
20. januar 2005 - 15:23 #4
Når jeg tager den kode og retter Groups(n).ToString til Groups[n].ToString() spå
compiler det hos mig.
Avatar billede arne_v Ekspert
20. januar 2005 - 15:23 #5
using System;
    using System.Text;
    using System.Text.RegularExpressions;
    public class Links
    {
        public static void Main(string[] args)
        {
            Test("[url]http://www.exp.dk[/url]");
            Test("Tryk Her");
            Test("bla [url]http://www.exp.dk[/url] bla Tryk Her bla");
        }
        private static void Test(string s)
        {
            Console.WriteLine(s);
            Console.WriteLine(LinkCreate(s));
        }
        public static string LinkCreate(string s)
        {
            return LinkCreate2(LinkCreate1(s));
        }
        public static string LinkCreate1(string s)
        {
            Match m = Regex.Match(s, "(.*?)(?:\\[link\\])(.*?)(?:\\[/link\\])(.*)", RegexOptions.Singleline);
            if (m == Match.Empty) {
                return s;
            } else {
                return m.Groups[1].ToString() + "<a href='" + m.Groups[2].ToString() + "'>" + m.Groups[2].ToString() + "</a>" + LinkCreate(m.Groups[3].ToString());
            }
        }
        public static string LinkCreate2(string s)
        {
            Match m = Regex.Match(s, "(.*?)(?:\\[link=)(.*?)(?:\\])(.*?)(?:\\[/link\\])(.*)", RegexOptions.Singleline);
            if (m == Match.Empty) {
                return s;
            } else {
                return m.Groups[1].ToString() + "<a href='" + m.Groups[2].ToString() + "'>" + m.Groups[3].ToString() + "</a>" + LinkCreate(m.Groups[4].ToString());
            }
        }
    }
Avatar billede arne_v Ekspert
20. januar 2005 - 15:23 #6
Funktionerne er shared/static fordi de ikke kræver noget kontekst og så
er det langt nemmest at have dem som shared/static.
Avatar billede basementjack Nybegynder
20. januar 2005 - 15:28 #7
...cs (25,29) unrecognized escape sequence
...cs (34,29) unrecognized escape sequence

linie 25 og 34 er der hvor Match m bliver sat lig med "expression"..
Har forsøgt med Groups(n).ToString til Groups[n].ToString()..
Avatar billede arne_v Ekspert
20. januar 2005 - 15:44 #8
Også hvis du kører den ger uændret:

using System;
using System.Text;
using System.Text.RegularExpressions;

public class Links
{
    public static void Main(string[] args)
    {
        Test("[link]http://www.exp.dk[/link]");
        Test("[link=http://www.exp.dk]Tryk Her[/link]");
        Test("bla [link]http://www.exp.dk[/link] bla [link=http://www.exp.dk]Tryk Her[/link] bla");
    }
    private static void Test(string s)
    {
        Console.WriteLine(s);
        Console.WriteLine(LinkCreate(s));
    }
    public static string LinkCreate(string s)
    {
        return LinkCreate2(LinkCreate1(s));
    }
    public static string LinkCreate1(string s)
    {
        Match m = Regex.Match(s, "(.*?)(?:\\[link\\])(.*?)(?:\\[/link\\])(.*)", RegexOptions.Singleline);
        if (m == Match.Empty) {
            return s;
        } else {
            return m.Groups[1].ToString() + "<a href='" + m.Groups[2].ToString() + "'>" + m.Groups[2].ToString() + "</a>" + LinkCreate(m.Groups[3].ToString());
        }
    }
    public static string LinkCreate2(string s)
    {
        Match m = Regex.Match(s, "(.*?)(?:\\[link=)(.*?)(?:\\])(.*?)(?:\\[/link\\])(.*)", RegexOptions.Singleline);
        if (m == Match.Empty) {
            return s;
        } else {
            return m.Groups[1].ToString() + "<a href='" + m.Groups[2].ToString() + "'>" + m.Groups[3].ToString() + "</a>" + LinkCreate(m.Groups[4].ToString());
        }
    }
}
Avatar billede arne_v Ekspert
20. januar 2005 - 15:45 #9
Iøvrigt skal du jo i ASP.NET kontekst nok kun bruge LinkCreate2 funktionen.
Avatar billede basementjack Nybegynder
20. januar 2005 - 15:48 #10
Det du lige sendte compliede fint.. Har du en ide om hvorfor det virkede før?..
Avatar billede basementjack Nybegynder
20. januar 2005 - 15:48 #11
Og smid et svar.. :)
Avatar billede basementjack Nybegynder
20. januar 2005 - 15:50 #12
Hov.. Der mangler da en <a href="link">linky</a> til [link=link]linky[/link], altså en måde at converte det tilbage igen..
Avatar billede arne_v Ekspert
20. januar 2005 - 15:53 #13
svar
Avatar billede arne_v Ekspert
20. januar 2005 - 15:54 #14
Du vil også den anden vej ?
Avatar billede basementjack Nybegynder
20. januar 2005 - 15:55 #15
Hvis kan lade sig gøre ja.. :) bruger den type [noget][/noget] til CMS, så det hjælper når der skal rettes i det igen..
Avatar billede arne_v Ekspert
20. januar 2005 - 16:00 #16
using System;
using System.Text;
using System.Text.RegularExpressions;

public class Links
{
    public static void Main(string[] args)
    {
        Test("[link=http://www.exp.dk]Tryk Her[/link]");
    }
    private static void Test(string s)
    {
        Console.WriteLine(s);
        Console.WriteLine(LinkCreate(s));
        Console.WriteLine(LinkRemove(LinkCreate(s)));
    }
    public static string LinkCreate(string s)
    {
        Match m = Regex.Match(s, "(.*?)(?:\\[link=)(.*?)(?:\\])(.*?)(?:\\[/link\\])(.*)", RegexOptions.Singleline);
        if (m == Match.Empty) {
            return s;
        } else {
            return m.Groups[1].ToString() + "<a href='" + m.Groups[2].ToString() + "'>" + m.Groups[3].ToString() + "</a>" + LinkCreate(m.Groups[4].ToString());
        }
    }
    public static string LinkRemove(string s)
    {
        Match m = Regex.Match(s, "(.*?)(?:<a href=')(.*?)(?:'>)(.*?)(?:</a>)(.*)", RegexOptions.Singleline);
        if (m == Match.Empty) {
            return s;
        } else {
            return m.Groups[1].ToString() + "[link=" + m.Groups[2].ToString() + "]" + m.Groups[3].ToString() + "[/link]" + LinkCreate(m.Groups[4].ToString());
        }
    }
}
Avatar billede basementjack Nybegynder
20. januar 2005 - 16:03 #17
Jeg siger mange 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