RegExp will nicht nach meinem Willen
Frank
- programmiertechnik
0 Bernhard Mecl0 Sönke Tesch0 Frank
0 Michael0 Frank0 Sven Rautenberg0 Frank
Hallo Fans!
ich bin gerade so ein wenig am programmentieren mit Regular Expressions und hänge da an einer Stelle fest, wo mein RegExp nicht weiter will.
Zur Erläuterung (geht mehr oder weniger um VBS):
ich lese eine Textdatei aus, die mehrere unterschiedliche Zeilen wie:
"41.1.1.1" "none" "PASS" "15:50:03" "08/29/02" "00:00:40" "" "2"
enthält. Die Werte differieren natürlich von Zeile zu Zeile.
Was ich davon jetzt haben möchte, ein Array mit den Einzelinfos. Mittels Split(...,Chr(34) & " " & Chr(34)) klappt es nicht, da auch z.b. zwei "Spalten" mal ohne Leerzeichen hintereinander stehen können.
Ich habe zur Aufteilung folgende RegExp verwendet:
"(.[ .:/\w\d])*" (für VBScript bzw. JS bitte die " oder / dazudenken)
das bringt mir immer folgendes Ergebnis (das | als Trennungsymbol für die Arrayelemente ansehen)
"41.1.1.1"|"none"|"PASS"|"15:50:03"|"08/29/02"|"00:00:40"|"" "|
dat ding läßt am Ende also die "2" weg und ich frage mich wieso.
Hat jemand von euch eine Erklärung und evt. einen Verbesserungsvorschlag?
Wenn ich "" durch " " in jeder Zeile ersetze, dann funktioniert es korrekt.
Viele Grüße, Frank
"(.[ .:/\w\d])*"
^
Deiner Definition zufolge muß innerhalb der Anführungszeichen immer eine gerade Anzahl (inkl. 0) von Zeichen stehen, wobei abwechselnd ein beliebiges (".") und eines aus der Menge, die in den eckigen Klammern beschrieben ist, auftreten muß.
"41.1.1.1" "none" "PASS" "15:50:03" "08/29/02" "00:00:40" "" "2"
Was ich davon jetzt haben möchte, ein Array mit den Einzelinfos.
Ich habe zur Aufteilung folgende RegExp verwendet:
"(.[ .:/\w\d])*" (für VBScript bzw. JS bitte die " oder / dazudenken)
Mal ganz einfach gefragt: Warum suchst Du nicht nach etwas, was zwischen zwei Anführungszeichen steht und kein Anführungszeichen ist? /"([^"]*)"/g funktioniert hier ganz prima, liefert allerdings etwas unverständlicherweise die beiden äußeren Anführungszeichen mit (Javascript, RegEx.match). Ich möchte meinen, daß andere Sprachen sich da etwas anders verhalten und den Inhalt der runden Klammern zumindest zusätzlich liefern.
Gruß,
soenk.e
"41.1.1.1" "none" "PASS" "15:50:03" "08/29/02" "00:00:40" "" "2"
Was ich davon jetzt haben möchte, ein Array mit den Einzelinfos.
Ich habe zur Aufteilung folgende RegExp verwendet:
"(.[ .:/\w\d])*" (für VBScript bzw. JS bitte die " oder / dazudenken)
Mal ganz einfach gefragt: Warum suchst Du nicht nach etwas, was zwischen zwei Anführungszeichen steht und kein Anführungszeichen ist? /"([^"]*)"/g funktioniert hier ganz prima, liefert allerdings etwas unverständlicherweise die beiden äußeren Anführungszeichen mit (Javascript, RegEx.match). Ich möchte meinen, daß andere Sprachen sich da etwas anders verhalten und den Inhalt der runden Klammern zumindest zusätzlich liefern.
Gruß,
soenk.e
Hi...
thanks for the hint. Aber das habe ich als erstes ausprobiert, weil es ja auch logisch erscheint, nimm alles zwischen zwei "", was kein " ist... allerdings, du schreibst es auch ohne . vor [ ....
das werd ich nochmal probieren...
danke.
Tschau, Frank
Hi
Ich habe zur Aufteilung folgende RegExp verwendet:
"(.[ .:/\w\d])*" (für VBScript bzw. JS bitte die " oder / dazudenken)
das bringt mir immer folgendes Ergebnis (das | als Trennungsymbol für die Arrayelemente ansehen)
"41.1.1.1"|"none"|"PASS"|"15:50:03"|"08/29/02"|"00:00:40"|"" "|
In einer RegExp Anweisung gibt es keinen Fall dafür, falls die Zeichenfolge leer ist.
Er sucht erst ein beliebiges Zeichen, um die Anweisung zu erfüllen und die ist in diesem Fall das Anführungszeichen am Ende des Vorletzten Infosatzes und das Anführungszeichen am Start des letzten Infosatzes das Ende der Zeichenkette.
Ist vielleicht ein bisschen schwer erklärt, aber ich denke du hast jetzt einen Ansatz.
Michael
Hi
Ich habe zur Aufteilung folgende RegExp verwendet:
"(.[ .:/\w\d])*" (für VBScript bzw. JS bitte die " oder / dazudenken)
das bringt mir immer folgendes Ergebnis (das | als Trennungsymbol für die Arrayelemente ansehen)
"41.1.1.1"|"none"|"PASS"|"15:50:03"|"08/29/02"|"00:00:40"|"" "|
In einer RegExp Anweisung gibt es keinen Fall dafür, falls die Zeichenfolge leer ist.
Er sucht erst ein beliebiges Zeichen, um die Anweisung zu erfüllen und die ist in diesem Fall das Anführungszeichen am Ende des Vorletzten Infosatzes und das Anführungszeichen am Start des letzten Infosatzes das Ende der Zeichenkette.
Ist vielleicht ein bisschen schwer erklärt, aber ich denke du hast jetzt einen Ansatz.
Michael
Hi Michael,
danke!!
(.[ .:/\w\d])* bedeutet imho aber,
0 oder mehrere Zeichen (durch das * anstelle von +), welche #leer# oder . oder : oder / oder ein wortzeichen oder eine dezimalziffer sind
dann dürfte er mir aber kein "" " bringen, da " doch nicht in die Gruppe [ .:/\w\d] passt
sollte ich \s noch in die Gruppe einfügen? .... ändert aber leider nix... schade.
ich bleibe ratlos.... aber probierend :-)
Gruß, Frank
Moin!
(.[ .:/\w\d])* bedeutet imho aber,
0 oder mehrere Zeichen (durch das * anstelle von +), welche #leer# oder . oder : oder / oder ein wortzeichen oder eine dezimalziffer sind
dann dürfte er mir aber kein "" " bringen, da " doch nicht in die Gruppe [ .:/\w\d] passt
Nö, das " passt dort auch nicht hinein - aber wunderbar auf den ersten Punkt, der für ein beliebiges Zeichen steht. :)
Du suchst nach dem Muster ".X.X.X.X", wobei X aus der Gruppe der bestimmten Zeichen kommt, und ".X" null oder mehrmals vorkommen dürfen. Das ist sicherlich nicht, was du willst. Jedenfalls passt die Zeichenkette "" " ganz wunderbar auf ".X"
- Sven Rautenberg
Moin!
(.[ .:/\w\d])* bedeutet imho aber,
0 oder mehrere Zeichen (durch das * anstelle von +), welche #leer# oder . oder : oder / oder ein wortzeichen oder eine dezimalziffer sind
dann dürfte er mir aber kein "" " bringen, da " doch nicht in die Gruppe [ .:/\w\d] passt
Nö, das " passt dort auch nicht hinein - aber wunderbar auf den ersten Punkt, der für ein beliebiges Zeichen steht. :)
Du suchst nach dem Muster ".X.X.X.X", wobei X aus der Gruppe der bestimmten Zeichen kommt, und ".X" null oder mehrmals vorkommen dürfen. Das ist sicherlich nicht, was du willst. Jedenfalls passt die Zeichenkette "" " ganz wunderbar auf ".X"
- Sven Rautenberg
Hi Sven,
vielen Dank für deine Aufklärungsarbeit. Da hab ich die Hilfe zum WSH entweder falsch verstanden oder da drin stand was falsch. Ich war der Meinung mit der Eck-Klammer gibt man an, aus welchem Bereich das Zeichen davor kommen darf...
Jetzt weiß ich aber Bescheid...
Danke nochmal und eine schönen Tag heute
Frank