| 

.NET C# Java Javascript Exception

2
<a class="name" href="#" onclick="changeSubscription('ID'); return false;">NAME</a>

Ich brauch die ID (z.B.: 3zVjD6rnLfPh0oLbFfpx97-QollErvePEDvtxgUplWg) und den NAME (z.B. hamburgerhaenger‬‏).

Wie mach ich das mit Regex? = )

Eine Hilfe wäre gut oder wenn das jemand machen kann und erläutern kann, was er da tut, mit bestimmte Zeichen.

Danke schonmal. : )
News:
31.03.2011
ZebRa 221 1 8
Floyd 14,6k 3 9
Edit: Tags bearbeitet
Floyd 02.04.2011
8 Antworten
2
Hier gibt's den Code: http://ideone.com/uauCF
Ich denke die einzelnen Teile des Patterns sollten klar verständlich erklärt sein; wenn nicht, einfach nochmal nachhaken.
31.03.2011
Daniel Kuppitz 596 1 7
Vielen Dank.
Hab das so. Geht aber irgentwie nicht.

http://ideone.com/nVnN8
ZebRa 31.03.2011
kannst du "Geht irgentwie nicht" prezisieren?
pinchbeck 01.04.2011
1
Wie Du erst später schreibst, ist das onclick eigentlich ein onClick. Entweder änderst Du das entsprechend im Pattern oder Du gibst noch RegexOption.IgnoreCase bei den Optionen mit.
Daniel Kuppitz 01.04.2011
Danke hab das genommen. Funktioniert wunderbar.
ZebRa 01.04.2011
2
Sehr hilfreich sind Online-Regex-Tester.
Da gibt es sogar Beispiele, wie man Strings nach einem bestimmten Muster suchen kann: Online RegExp Tester - Regex-Example.
Alles schön erklärt und man kann es gleich ausprobieren.
31.03.2011
Jürgen Luhr 7,1k 2 9
0
Vielen Dank.
Hab das so. Geht aber irgentwie nicht.

http://ideone.com/nVnN8

Bekomme nichts zurück...
31.03.2011
ZebRa 221 1 8
ZebRa 221 1 8
0
bin kein regexp experte, aber ich meine, dein beispiel wurde falsch verstanden:

sieht der quelltext bei dir wirklich so aus:

<a class="name" href="#" onclick="changeSubscription('ID'); return false;">NAME</a>

oder so:

<a class="name" href="#" onclick="changeSubscription('3zVjD6rnLfPh0oLbFfpx97-QollErvePEDvtxgUplWg'); return false;">hamburgerhaenger‬‏</a>
01.04.2011
nabuchodonossor 1,3k 5
0
Ohne Angabe der Sprace kann ich leider kein Beispiel posten. Hier aber der RegEx-Ausdruck:

// <a class="name".*changeSubscription\('(?<ID>.*?)'\).*?>(?<NAME>.*?)</a>
//
// Optionen: RegexOptions.IgnoreCase | RegexOptions.Singleline
//
// Match the characters "<a class="name"" literally «<a class="name"»
// Match any single character that is not a line break character «.*»
// Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
// Match the characters "changeSubscription" literally «changeSubscription»
// Match the character "(" literally «\(»
// Match the character "'" literally «'»
// Match the regular expression below and capture its match into backreference with name "ID" «(?<ID>.*?)»
// Match any single character that is not a line break character «.*?»
// Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?»
// Match the character "'" literally «'»
// Match the character ")" literally «\)»
// Match any single character that is not a line break character «.*?»
// Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?»
// Match the character ">" literally «>»
// Match the regular expression below and capture its match into backreference with name "NAME" «(?<NAME>.*?)»
// Match any single character that is not a line break character «.*?»
// Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?»
// Match the characters "</a>" literally «</a>»

bzw. ohne NamedCapturedGroups

// <a class="name".*changeSubscription\('(.*?)'\).*?>(.*?)</a>

Und hier ein Beispiel: http://regexp-evaluator.de/evaluator/872a8b8a32c86b1dc5f5dbeb01ffa40c/#ergebnis

Beispiel in C#:

string sourceString = ...; //inhalt aus http://ideone.com/VHAIP
Regex RegexObj = new Regex("<a class=\"name\".*changeSubscription\('(?<ID>.*?)'\).*?>(?<NAME>.*?)</a>",
RegexOptions.IgnoreCase);
MatchCollection myMatchCollection = RegexObj.Match(sourceString);
foreach(Match myMatch in myMatchCollection){
Console.WriteLine("id=" + myMatch["ID"].Value);
Console.WriteLine("name=" + myMatch["NAME"].Value);
}
01.04.2011
Floyd 14,6k 3 9
Floyd 14,6k 3 9
0
Es ist C# und es sieht so aus:

<a class="name" href="#" onclick="changeSubscription('3zVjD6rnLfPh0oLbFfpx97-QollErvePEDvtxgUplWg'); return false;">hamburgerhaenger‬‏</a>


Das oben waren nur Platzhalter, weil sich die Werte immer ändern.
Es kommt öfters vor, und ich will beide auslesen. Das mit dem "NamedCapturedGroups" klingt interessant.

Wie gesagt hier ist mein Ausschnitt aber ich bekomm nichts zurück. (Er findet nichts)

http://ideone.com/nVnN8

Hier ein Auszug aus der HTML-Seite:

http://ideone.com/VHAIP

Wenn ich mit Chrome, rechtsklick -> "Element untersuchen" mach, dann kommt das:

<a class="name" href="#" onclick="changeSubscription('3zVjD6rnLfPh0oLbFfpx97-QollErvePEDvtxgUplWg'); return false;">hamburgerhaenger‬‏</a>

Wenn ich den Quelltext durchgehe, dann kommt das: (rechtsklick Quelltext anzeigen)

<a class="name" href="#" onClick="changeSubscription('3zVjD6rnLfPh0oLbFfpx97-QollErvePEDvtxgUplWg'); return false;">&#x202a;hamburgerhaenger&#x202c;&rlm;</a>

Bedanke mich nochmal an alle, die mir hier helfen.
01.04.2011
ZebRa 221 1 8
ZebRa 221 1 8
1
Hab mein Beispiel mal angepasst und ein C# Beispiel mit NamedCapturedGroups hinzugefügt.
Floyd 01.04.2011
1
Hab mein Beispiel nochmal überarbeitet um die Anforderungen die du in "http://ideone.com/VHAIP" stellst zu berücksichtigen.
Floyd 01.04.2011
0
Danke Floyd,
sobald ich feierabend habe und daheim bin, werde ich es testen.
Hast du mir vielleicht ein Tutorial zu "NamedCapturedGroups"?
Würde gerne selbst solche Patter schreiben. : )

Grüße
01.04.2011
ZebRa 221 1 8
1
Dafür brauchst du kein Tutorial. Der Trick ist einfach ?<NameDerGruppe> in die Klammern zu schreiben. Also aus (.*?) wird (?<ID>.*?).
Hier das Tutorial: http://www.regular-expressions.info/named.html
Btw, bitte bewerte die Beiträge positiv die für dich nützlich sind oder waren.
Floyd 01.04.2011
Bewerte sie doch als "Hilfreich", meinst du das?
ZebRa 01.04.2011
"(?<ID>.*?)" Für was das: ".*?)"
ZebRa 01.04.2011
"." steht für ein beliebiges Zeichen
"*" für beliebig oft
"?" ist eine Option und heißt "verhalte dich nicht gierig" .. ist etwas schwierig zu erklären beutet aber so viel wie "hör auf so bald du kannst". Ohne das "?" würde es bedeuten "nimm so viel du kannst". Das ist dann besonders wichtig wenn man mehrere treffer haben kann. wie zum beispiel in deinem Beispielcode. ohne fragezeichen würde ".*" von der ersten bis zu letzten zeile reichen. dh. vom ersten changeSubscription(' bis zum letzten '). mit hört es beim ersten ') wieder auf.
Floyd 01.04.2011
Zum Thema Bewerten. Du kannst jeden Beitrag mit den Pfeilen als Hilfreich oder Nicht Hilfreich bewerten. Zusätzlich kannst du mit dem Haken unter den Pfeilen den Beitrag kennzeichen der dir besonders hilfreich war. Codekicker sortiert dann die Beiträge so um, das die Hilfreichsten ganz oben stehen, und andere die das selbe Problem / oder ein ähnliches haben, finden sofort die nützlichsten informationen.
Floyd 01.04.2011
0
Okay, geht alles.

Vielen Dank an alle die mit geholfen haben.
01.04.2011
ZebRa 221 1 8
ZebRa 221 1 8

Stelle deine String-Frage jetzt!