Laden...

regulärer Ausdruck für href-Attribut passt nicht auf URL alleine

Erstellt von delta† vor 12 Jahren Letzter Beitrag vor 12 Jahren 862 Views
Thema geschlossen
D
delta† Themenstarter:in
42 Beiträge seit 2010
vor 12 Jahren
regulärer Ausdruck für href-Attribut passt nicht auf URL alleine

Hallo,

ich habe in einen Buch den folgenden regulären Ausdruck als Beispiel Code gefunden:

string a = @"href\s*=\s*(?:""(?<1>[^""]*)""|(?<1>\S+))"

dieser sollte dann mit

 Regex r = new Regex(a,RegexOptions.IgnoreCase|RegexOptions.Compiled);

überprüft werden und letzten Endes über

 r.Match(x)

den eingebenen Pfad übrprüfen wobei x natürlich der Pfad wie z.B. "http://www.mycsharp.de/wbb2/newthread.php" ist.

Ich habe den regulären Ausdruck nun mehrfach verglichen und keinen Unterschied zum Buch sehen können - das Problem ist halt, das er keinen Match liefert. Um sicher zu gehen das es nur nicht bei mir nicht funktioniert würde ich Dich bitten dieses - falls du die zwei Minuten Zeit einmal auszuprobieren. Danke Dir.

Hier noch mal das Ganze als Klasse zur Einbindung in ein Consolen Projekt:

    class RegexTest
    {
        public RegexTest() 
        {
            Method();
        }

        private void Method()
        {
            Regex r = new Regex(@"href\S*=\S*(?:""(?<1>[^""]*)""|(?<1>\S+))",
                                RegexOptions.IgnoreCase | RegexOptions.Compiled);
            Match m;
            for (m = r.Match(@"http://www.mycsharp.de/wbb2/newthread.php"); m.Success; m = m.NextMatch()) 
            {
                Console.WriteLine(m.Groups[1]);
            }
            Console.ReadLine();
        }
    }
1.346 Beiträge seit 2008
vor 12 Jahren

Der reguläre Ausdruck passt da nicht. Versuch mal, ob das einen Match liefert:

href="http://www.mycsharp.de/wbb2/newthread.php"

2.207 Beiträge seit 2011
vor 12 Jahren

Hallo delta†,

du kannst reguläre Ausdrücke auch über das hier im Forum gepostete Programm "RegexLab" testen. Somit kannst du sofort schauen, welchen Resultstring dein RegEx bringt.

RegExLab in MyCSharp.de

Gruss

Coffeebean

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo delta†,

natürlich kann man sich mal vertun, allerdings ist es schon etwas wundersam, warum du beim mehrfachen Vergleichen nicht gesehen hast, dass der Pattern mit "href" beginnt, aber der Input-String mit "http" beginnt und auch an keiner anderen Stelle "href" enthält, weshalb der Pattern nirgendwo passen kann.

Die Alternative im Pattern (die Pipe '|') bezieht sich ja wegen der Klammern nur auf den Teil nach dem "href" (genauer: nach dem href\s*=\s*).

Wenn du willst, dass dein Pattern nur auf die Url passt, findest du auch leicht Beispiele - typischerweise welche, die mit "http://" beginnen. Oder genauer mit ^ beginnen und $ enden, wenn der Pattern nur dann auf den String passen soll, wenn der String nur die URL und nichts anders enthält. Ein Pattern ohne ^ und $ würde dagegen auch auf die Url in deinem Input-String passen. Es kommt darauf an, was du willst.

Den Titel habe ich mal angepasst - dadurch steht jetzt die Lösung quasi schon im Titel. Aber stell dir vor, jeder, der eine Frage zu regulären Ausdrücken hat, würde seinen Thread "reguläre Ausdrücke" nennen. Und jetzt stell dir vor, du wolltest die Forensuche bei einem Regex-Problem benutzen und alle Treffer heißen "reguläre Ausdrücke". Da findet keiner durch. Also Titel bitte immer ausreichend spezifisch wählen.

herbivore

Thema geschlossen