| 

.NET C# Java Javascript Exception

2
Hi,

habe mir schon etliche Tutorials zum Thema Regex angeschaut aber ich komm nicht drauf klar :(
Ich habe eine Website wovon ich einen bestimmten wert ausm Quelltext auslesen will.

<input name="t" value="2vvijRbCKGRt2H4j3v2ym8pG" type="hidden">

Nur den Wert der Value möchte ich haben. Wie stelle ich das an?
Vor dem <input und nachdem hidden"> ist noch der jeweilige Quelltext der Seite.

lg
05.12.2012
Fragenur 1 1
3 Antworten
1
du suchst demnach folgenden RegEx-Ausdruck:
\<input\sname="t"\svalue="(.+?)"\stype="hidden"\>
(ja, ich maskiere gern ^^)

Machen wir das ganze für .Net:
string s = "<input name=\"t\" value=\"2vvijRbCKGRt2H4j3v2ym8pG\" type=\"hidden\">";
string s2 = GetValue(s);

private static String GetValue(String searchString)
{
System.Text.RegularExpressions.Regex rgx
= new System.Text.RegularExpressions.Regex("\\<input\\sname=\"t\"\\svalue=\"(?<VAL>.+?)\"\\stype=\"hidden\"\\>");
return rgx.Match(searchString).Groups["VAL"].Value;
}
(und ich arbeite auch gern mit Named Groups (?<VAL>) ^^)
05.12.2012
Karill Endusa 1,5k 1 9
Statt dem .+? ist i.d.R. [^"]+ sicherer.
gfoidl 05.12.2012
ich persönlich seh da jetz kein direktes Problem von .+? und warum man [^"]+ nutzen sollte?!
Karill Endusa 05.12.2012
wenn ich das nur mit dem string s mache funktioniert das jedoch befindet sich die value nicht nur in dem string sondern in der ganzen Website. Was muss ich vor den \\ und nach den \\ schreiben damit das funktioniert ?
Fragenur 05.12.2012
1
@Karill: für den konkreten Fall macht es keinen Unterschied, aber bei anderen Fällen kann es sich auswirken. Siehe z.B. http://www.mycsharp.de/wbb2/thread.php?postid=3560470#post3560470

Den Hinweis brachte ich einfach aus dem Grund, dass hier nicht nur spezifische Lösungen gepostet werden soll(t)en, sondern auch allgemeinere Hinweise bzw. auch deshalb da auf mögliche Stolpersteine hingewiesen werden sollte. Finde ich halt mal...
gfoidl 05.12.2012
@Fragenur: was meinst du mit "sondern in der ganzen Website"? Statt dem string s das Literal zuzuweisen, weist du halt den Inhalt der Website zu - z.B. mittels File.ReadAllText, WebClient.DownloadString, etc.
Zum Testen des Patterns kannst du http://www.mycsharp.de/wbb2/thread.php?threadid=21580 verwenden, damit siehst du auch was am Pattern ev. nicht passt.
gfoidl 05.12.2012
@gfoidl:
ah okay so betrachtet ergibts das natürlich Sinn :)
Ja, auch bei Regex "führen viele Wege nach Rom"...
Karill Endusa 06.12.2012
0
@gfoidl
Habe den Quelltext der seite übergeben , es funktioniert trotzdem nicht.
Ebenso wenn ich das Regex Lab verwende zeigt er mir keinen Treffer an.
06.12.2012
Fragenur 1 1
Hmm habe mir nochmal den Quelltext der Seite angeschaut ich weiss zwar nicht warum aber der wurde jetzt geändert.

Undzwar von "
<input name="t" value="2vvijRbCKGRt2H4j3v2ym8pG" type="hidden">"

in

"<input type="hidden" name="t" value="SPPNgqWXSX1BhdD-ChEfy3Z6" />"

habe die Pattern jetzt mal selbständig versucht zu ändern, das ist bei rausgekommen "\<input\stype=""hidden""\sname=""t""\svalue=""(?<VAL>.+?)""\>"
Aber ohne Erfolg schätze es liegt an dem (?<VAL>.+?) was für Werte akzeptiert das nur ?
Weil jetzt ist ja ein "-" mit drin was vorher nicht war.
Fragenur 06.12.2012
Bin gerade bissschhen blöd :(
Das was ich nun geändert habe funktioniert einigermaßen.
Jedoch erhalte ich nicht nur das was ich haben will sondern noch viel im anhang:

CWvANnP89drpkJehFr9VCUcG" /><input type="hidden" name="lhs_type" value="default" /><div class="alternative-option
Fragenur 06.12.2012
0
Habs nun endlich hingekriegt zwar nicht so wie ich es gerne hätte also wenn ihr das mit dem Regex hinkriegt bitte posten!

Die Lösung (unsauber und hässlich funzt aber):

Private Shared Function GetValue(ByVal searchString As String)
Dim rgx As New System.Text.RegularExpressions.Regex("\<input\stype=""hidden""\sname=""t""\svalue=""(?<VAL>.+?)""\>")
Dim t As String
Dim s As String()
t = rgx.Match(searchString).Groups("VAL").Value
t = t.Insert(24, "|")
s = t.Split("|")

Return s(0)
End Function
06.12.2012
Fragenur 1 1

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH