Laden...

Regex: alle Treffer zurückbekommen

Erstellt von masta // thomas vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.660 Views
masta // thomas Themenstarter:in
35 Beiträge seit 2006
vor 17 Jahren
Regex: alle Treffer zurückbekommen

Hey Leute,

ich möchte, dass mein regulärer Ausdruck eine Zeichenkette nach allen Übereinstimmungen mit dem Suchmuster durchsucht.

Beispiel:


Zeichenkette: abc 123 ade 456 afg 789

Pattern: a([a-z]{2})

Match[0]: abc
Match[1]: ade
Match[2]: afg

Um das ganze auf den Punkt zu bringen, ich lese eine Homepage in ein String ein und möchte jeweils alle Bildernamen erhalten, ich matche also vereinfacht auf <img src="(.+)"> und möchte alle Treffer zurückbekommen.

Danke für eure Hilfe

Thomas

we love C#...

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo masta // thomas.

mach eine Schleife über Match.Success/Match.NextMatch.

herbivore

masta // thomas Themenstarter:in
35 Beiträge seit 2006
vor 17 Jahren

Danke herbivore
Den Gedanken hatte ich Anfangs auch, dachte, es gäbe vielleicht bereits eine Methode für.

Kannst du mir nur sagen, warum ich stets nur die "1" rausbekomme? [ich bin quasi in ner Endlosschleife drin]


string text = @"test1.jpg
                test2.jpg
                test3.jpg
                test4.jpg";
Regex r = new Regex("test(?<num>\\d{1}).jpg", RegexOptions.Multiline);
Match m = r.Match(text);
            
while (m.Success)
{
    m.NextMatch();
    MessageBox.Show(m.Groups["num"].Value);
}

we love C#...

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo masta // thomas,

es gäbe vielleicht bereits eine Methode für.

Gibt es auch: Regex.Matches

ich bin quasi in ner Endlosschleife drin

m = m.NextMatch();

herbivore

masta // thomas Themenstarter:in
35 Beiträge seit 2006
vor 17 Jahren

hey

nochmal danke 😉 wollte grad editieren, hab nämlich selbst gemerkt, dass ich mich bisschen blöd angestellt habe... falls es jemanden sonst interessiert...


string text = @"test1.jpg
                test2.jpg
                test3.jpg
                test4.jpg";
Regex r = new Regex("test(?<num>\\d{1}).jpg", RegexOptions.Multiline);
Match m = r.Match(text);
            
while (m.Success)
{
    m = m.NextMatch();
    MessageBox.Show(m.Groups["num"].Value);
}

und ich schau mir mal Regex.Matches an!

Dankeschön

[ EDIT ]

die variante gefällt mir glaube ich noch besser , obwohl ich nicht weiß, welche der beiden performanter ist...


string text = @"test1.jpg
                test2.jpg
                test3.jpg
                test4.jpg";
Regex r = new Regex("test(?<num>\\d{1}).jpg", RegexOptions.Multiline);
            
MatchCollection m = r.Matches(text);

for (int i = 0; i < m.Count; i++)
    MessageBox.Show(m[i].Groups["num"].Value);

we love C#...

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo masta // thomas,

performancemäßig das dürfte relativ egal sein - zumal in beiden Schleifen das Wegklicken der Messageboxen die Performancebremse sein wird. 🙂

herbivore

masta // thomas Themenstarter:in
35 Beiträge seit 2006
vor 17 Jahren

nja... da wirst du recht haben g jetzt wo du es sagst - eine blöde angewohneit 😉

übrigens wollte ich angemerk haben, dass die community echt top ist - nicht nur vom inhalt her sondern auch vom know-how und von den menschen hier. 👍

we love C#...