Laden...

String in anderem String mittels Jokerzeichen suchen (Werte/Attribute in HTML-Code)

Letzter Beitrag vor 13 Jahren 9 Posts 1.024 Views
String in anderem String mittels Jokerzeichen suchen (Werte/Attribute in HTML-Code)

Hallo,
ich habe folgendes Problem, nämlich möchte ich den input type, den Namen, sowie den Namen der class von einem Formular auf einer HTML oder PHP seite herausbekommen.
Dafür durchsuche ich den Quelltext, den ich vorher mit einer anderen Methode heruntergeladen habe mittels folgendem Code (habe ich nicht selber geschrieben):


string strRegExPatten = "<\\s*input.*?name\\s*=\\s*\";(?<Name>.*?)\".*?value\\s*=\\s*\";(?<Value>.*?)\".*?>";
Regex reg = new Regex(strRegExPatten, RegexOptions.Multiline);
MatchCollection mc = reg.Matches(strPage);
string strTemp = "";
foreach (Match m in mc)
{
strTemp = strTemp + m.Groups["Name"].Value + "=" + m.Groups["name1"].Value + " ";
strTemp += " | ";
}

Das was in "strRegExPatten" steht funktioniert und liefert die Infos vom Submit Button, jedoch brauche ich die Infos vom Usernamen- und Passwortformular aus dem Quelltext.
Diese sehen folgendermaßen aus:
<input type="text" name="???" class="formular" ...>
Jedoch weiß ich nicht wie man das mit den "Jokerzeichen" schreibt wie oben.

Ich wäre für jeden Tipp dankbar, habe schon den ganzen Vormittag im Internet gesucht 😦
Mfg Arnoe

Ne oder?
Oh doch xD

Hallo arnoe,

ich habe deine Frage ehrlich gesagt nicht ganz verstanden ...
Trotzdem ein Hinweis: Du solltest ein @ vor den String der Variable strRegExPatten setzen, sodass du die Backslashes nicht zusätzlich escapen musst. Das erhöht die Lesbarkeit des regulären Ausdrucks drastisch:

string strRegExPatten = "<\s*input.*?name\s*=\s*\";(?<Name>.*?)\".*?value\s*=\s*\";(?<Value>.*?)\".*@?>";

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

Hallo m0rius,
danke für den Hinweis.
Zum Verständnis -
Ich möchte in dem String strPage(mehrere hundert Zeilen groß) suchen ob der String strRegExPatten darin irgendwo vorkommt und wie die Variablen heißen, also die Teile des Strings die ich nicht kenne und wofür das / die Jokerzeichen gebraucht werden.
Ich hoffe das es nun etwas besser nachzuvollziehen ist, was mein Problem ist. 😃
Mfg Arnoe

Ne oder?
Oh doch xD

Hallo arnoe,

zum Auslesen des benannten Platzhalters Name verwendest du doch schon m.Groups["Name"].Value (und analog m.Groups["Value"].Value) für jeden Treffer – funktioniert der Code nicht wie erwartet?

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

Hallo m0rius,
mit dem Code aus meinem Anfangspost bekomme ich die daten für die Buttons aus dem Quelltext holt: <input type="submit" name="submit" value="Einloggen" class="button"> Die Ausgabe dieses Codes lautet submit=Einloggen" class="button | submit=Jetzt suchen" class="button |
Nun will ich aber einen zweiten, ich will mal sagen "Filter" haben der mir die Variablen für: _<input type="text" name="login" class="formular" _ ausgibt, die Ausgabe sollte in etwa so aussehen : ** text=login class=formular** wobei das login nicht unbedingt login sein muss sondern nur das formular festgelegt ist.
Und dafür muss man denk ich die "Jokerzeichen" wie .*? anders setzen aber da hab ich wie gesagt noch nichts vernünftiges im Internet gefunden
Mfg arnoe

Ne oder?
Oh doch xD

Ich würd den Ausdruck so ändern:

<\s*input(?:\s+(?<Key>\w+)\s*=\s*"(?<Value>[^"]*)")*\s*>

Damit bekommst du alle Key-Value Pairs aus deinem Html Tag und kannst dann im Code selber deine Logik implementieren als sie umständlich in Regex zu Lösen.

Lg XXX

Danke für die schnelle Antwort.
Ich habe gerade das Tool "Rad Software Regular Expression Designer" gefunden, das hat mich schon um einiges weitergebracht. Denn jetzt verstehe ich auch erst wirklich wie das alles funktioniert. Nun hab ich deinen Ausdruck in dem Programm eingegeben und den kompletten Quelltext. Das Ergebnis ist, das er das alles findet wie ich es haben will 👍 in meinem C# Programm jedoch liefert er nur die letzten Werte der "Gruppe". Ich hab auch schon geguckt ob es eine Möglichkeit gibt den ersten oder zweiten Wert auszulesen, jedoch erfolglos.
Die Ausgabe lautet immernoch

m.Groups["Key"].Value + "=" + m.Groups["Value"].Value + " ";

Mfg arnoe

Ne oder?
Oh doch xD

Schau mal unter Groups["..."].Captures nach.

Lg XXX

Ich würde dir für das Auslesen von HTML Code die htmlagilitypack Library empfehlen. Damit ist das deutlich eleganter zu lösen.

Again what learned...