[Regex] Problem mit Pattern

02/03/2013 23:38 roteisenklinge#1
Hallo meine lieben,

habe folgende zwei Probleme

Quote:
Code:
<a class="fbxWelcomeBoxBlock _8o _8s lfloat" href="http://www.facebook.com/johann.goldbaum" aria-hidden="true" tabindex="-1">
Dort möchte ich per Regex den Namen : johann.goldbaum Dieser ändert sich natürlich also .* ?

Pattern:Dim ra As New Regex("<a class=""fbxWelcomeBoxBlock _8o _8s lfloat"" href=""http:\/\/www.facebook.com\/(?<name>([^<]+))")

Funktioniert nicht.

Quote:
<script>function envFlush(a){function b(c){for(var d in a)c[d]=a[d];}if(window.requireLazy){requireLazy(['Env'],b);}else{Env=window.Env||{};b(Env);}}envFlush({"u ser":"100005087773375","locale":"de_DE","method":"GET","svn_rev":727171 ,"tier":"","vip":"31.13.81.7","static_base":"http: \/\/static.ak.fbcdn.net\/","www_base":"http:\/\/www.facebook.com\/","rep_lag":2,"fb_dtsg":"AQD3jfOI","ajaxpipe_token ":"AXhLacnmjuODatTx","lhsh":"mAQE67IRZ","tracking_ domain":"http:\/\/pixel.facebook.com","retry_ajax_on_network_error": "1","fbid_emoticons":"1"});</script>
Diese Nutzerid muss auch herausgefiltert werden. Leider komm ich damit überhaupt nicht weiter. Habe mir die Regex Tutorials hier im Forum angeschaut sowie diesen Regex Helper, aber irgendwie komm ich nicht wirklich weiter...

Für eure Hilfe wäre ich sehr dankbar!
02/04/2013 01:09 tolio#2
so sollte es gehen, hab grad keine lust nen pattern zu machen ;)
frei aus der hand:
Code:
dim name as string = split(split(input,"http://www.facebook.com/")(1),"""")(0)
dim id as string = split(split(input,"""user"":""")(1),"""")(0)
02/04/2013 12:40 Mi4uric3#3
Quote:
Originally Posted by roteisenklinge View Post
Quote:
<a class="fbxWelcomeBoxBlock _8o _8s lfloat" href="http://www.facebook.com/johann.goldbaum" aria-hidden="true" tabindex="-1">
Diese Nutzerid muss auch herausgefiltert werden. Leider komm ich damit überhaupt nicht weiter. Habe mir die Regex Tutorials hier im Forum angeschaut sowie diesen Regex Helper, aber irgendwie komm ich nicht wirklich weiter...

Für eure Hilfe wäre ich sehr dankbar!
Ist es wichtig, dass du dafür RegEx benutzt?
Visual Basic.Net bietet da nämlich gute Funktionen, um das anderweitig zu lösen..

PHP Code:
Dim Source "<a class=""fbxWelcomeBoxBlock _8o _8s lfloat"" href=""http://www.facebook.com/johann.goldbaum"" aria-hidden=""true"" tabindex=""-1"">"
Dim UserName As String Split(source"fbxWelcomeBoxBlock _8o _8s lfloat")(1)
UserName Split(UserName"facebook.com/")(1)
UserName Split(UserName"""")(0)

Source "<script>function envFlush(a){function b(c){for(var d in a)c[d]=a[d];}if(window.requireLazy){requireLazy(['Env'],b);}else{Env=window.Env||{};b(Env);}}envFlush({""user"":""100005087773375"",""locale"":"
Dim UserId Split(Source"envFlush({""user"":""")(1)
UserId Split(UserId"""")(0
02/04/2013 14:24 roteisenklinge#4
Quote:
Originally Posted by Mi4uric3 View Post
Ist es wichtig, dass du dafür RegEx benutzt?
Visual Basic.Net bietet da nämlich gute Funktionen, um das anderweitig zu lösen..

PHP Code:
Dim Source "<a class=""fbxWelcomeBoxBlock _8o _8s lfloat"" href=""http://www.facebook.com/johann.goldbaum"" aria-hidden=""true"" tabindex=""-1"">"
Dim UserName As String Split(source"fbxWelcomeBoxBlock _8o _8s lfloat")(1)
UserName Split(UserName"facebook.com/")(1)
UserName Split(UserName"""")(0)

Source "<script>function envFlush(a){function b(c){for(var d in a)c[d]=a[d];}if(window.requireLazy){requireLazy(['Env'],b);}else{Env=window.Env||{};b(Env);}}envFlush({""user"":""100005087773375"",""locale"":"
Dim UserId Split(Source"envFlush({""user"":""")(1)
UserId Split(UserId"""")(0
hey,
naja habe bis jetzt immer Regex benutzt, macht der Gewohnheit
Danke ;)

Habs hiermit versucht
Dim lsdPattern As String = ("(?<=<a class=""fbxWelcomeBoxBlock _8o _8s lfloat"" href=""http:\/\/www.facebook.com\/).*?(?="")")
02/12/2013 15:12 Popicker#5
Warum RegEx? Warum Split? Was passiert denn wohl wenn sich die CSS Klasse mal ändert?

Um es etwas langlebiger zu gestalten rate ich zu string.Split und string.IndexOf Methoden. Beispielsweise

Code:
string href = "<a class=\"fbxWelcomeBoxBlock _8o _8s lfloat\" href=\"http://www.facebook.com/johann.goldbaum\" aria-hidden=\"true\" tabindex=\"-1\">";
int usernameStartIndex = href.IndexOf(".com/") + 5;
int usernameLength = href.IndexOf('"', usernameStartIndex) - usernameStartIndex;
string username = href.Substring(usernameStartIndex, usernameLength);

Console.WriteLine(username);
Console.ReadLine();
LG
02/12/2013 17:15 Schlüsselbein#6
Sind ja alles schöne Workarounds, aber für so einen Fall würde ich mir lieber einen HTML-Parser schnappen.
Damit bekommt man dann schonmal ohne rumhantieren mit irgendwelchen String-Funktionen an folgendes:
[Only registered and activated users can see links. Click Here To Register...]
Daraus sollte es dann wohl recht einfach sein, den hinteren Teil zu bekommen.
02/12/2013 17:57 tolio#7
und was macht ein html parser? genau er nutzt string, funktionen in allen farben in formen

da kann es nicht schaden sowas auch mal er hand zu probieren

ich persöhnlich würde mich bei sowas einfachem und schnellem nie auf fremdkomponeten verlassen
02/12/2013 18:04 Popicker#8
Einen HTML Parser für ein Html Anchor zu nutzen halte ich für overkill, zu mal du nicht drum rum kommst string funktionen zu nutzen. Der Html Parser macht nichts anderes. Von daher würde ich eher einen Html Parser eher als Workaround bezeichnen. Das man diese Funktionalität in eine Klasse hüllen kann macht natürlich Sinn, wenn es dir darum gehen sollte.

Ein Html Parser liest Html Code ein und wandelt ihn in Objekte, bzw. befüllt Objekte mit den Informationen zum leichteren Zugriff.
02/12/2013 18:22 Schlüsselbein#9
Deswegen wozu das Rad neu erfinden. Das bisschen Overhead sollte hier sicherlich nicht ins Gewicht fallen. Der Flaschenhals ist sowieso der Webrequest.
Quote:
da kann es nicht schaden sowas auch mal er hand zu probieren
Stimme ich dir schon zu, aber sich auch mal mit einem der gängigen Parser zu befassen, kann auch nicht schaden.
02/12/2013 21:29 Popicker#10
Das sehe ich ehrlich gesagt etwas anders, aber jeder soll ja auch seine Art haben.
Ich würde es wohl so lösen wie von mir Vorgeschlagen. Einen HTML Parser zu nutzen ist für mich völliger Overkill. Man darf nicht vergessen, dass man damit auch die Komplette DLL an Board hat.

Das Rad wurde auch nicht neu erfunden. Es macht in meinen Augen wenig Sinn einen kompletten Parser zu benutzen um aus einem so kurzem String eine kleine Information zu holen. Zumal du dennoch mit String Methoden arbeiten müsstest um an die Information zu kommen.