Reguläre Ausdrücke / CookieValues codieren?

Hallo,

mein Problem ist folgendes:

Ich möchte Cookies schreiben, deren Werte aus Komma- oder Semikolon-separierten Listen und diversen Sonderzeichen bestehen. Damit es hier keine Probleme gibt, sollen die Werte URLencode mäsig escaped werden.

Bsp: Aus einem Wert „Teil1;Teil2;Teil3“ soll also „Teil1%3ATeil2%3ATeil3“ werden.

In Perl ist das simpel und mit einer Zeile Code zu erledigen. Stellt sich die Frage: Kennt jemand eine Möglichkeit, das in Java zu tun?

Der korrespondierende PerlCode wäre:

  1. für escapen:

$CookieValue =~ s/([^a-zA-Z0-9_.-])/uc sprintf("%%02x",ord($1))/eg

Bedeutet: Für alle Zeichen in $CookieValue, die nicht alphanumerisch oder „_“, „.“ oder „-“ sind, führe die Funktion „sprintf“ aus und ersetze sie durch den resultierenden Wert.

springf erzeugt in diesem Falle den passenden HexCode, also z.B. „%3A“ für das Semikolon.

  1. für unescapen

$CookieValue =~ tr/+/ /;

ersetzt alle „+“ durch ein Leerzeichen. Das geht auch in Java…

$CookieValue =~ s/%([0-9a-fA-F){2})/pack(„c“, hex($1))/ge

Ersetzt alle Zeichen, die aus einem „%“ und zwei weiteren Zeichen im Bereich von 0-9, a-f oder A-F liegen, bestehen durch den entsprechenden ASCII character durch aufrufen der „pack“ Funktion.

Ich wäre für eure Hilfe dankbar.

Thomas

Moin,

In Perl ist das simpel und mit einer Zeile Code zu erledigen.
Stellt sich die Frage: Kennt jemand eine Möglichkeit, das in
Java zu tun?

Nicht persönlich, aber es gibt mindestens zwei RE-Pakete für Java. Eines von Alphaworks, das andere von Apache.

Thorsten

In Perl ist das simpel und mit einer Zeile Code zu erledigen.
Stellt sich die Frage: Kennt jemand eine Möglichkeit, das in
Java zu tun?

Nicht persönlich, aber es gibt mindestens zwei RE-Pakete für
Java. Eines von Alphaworks, das andere von Apache.

Danke für das „mindestens“. Es gibt erstens zwei (wirklich
brauchbare) vom Apache-Projekt:
http://jakarta.apache.org

und dann gibt es noch (auch wieder mindestens) einen Port des
GNU.regexp Packetes:
http://www.cacas.org/~wes/java/

Und auch das wird wohl noch nicht alles sein :wink:

Stefan :smile:

Moin,

Danke für das „mindestens“.

Wieso „Danke“?

Es gibt erstens zwei (wirklich brauchbare) vom Apache-Projekt:
http://jakarta.apache.org

Läßt sich in einem Satz beschreiben, worin die sich unterscheiden?

Thorsten

Jakarta ORO vs. Jakarta RegExp

Es gibt erstens zwei (wirklich brauchbare) vom Apache-Projekt:
http://jakarta.apache.org

Läßt sich in einem Satz beschreiben, worin die sich
unterscheiden?

Bin mir gerade nicht einig, ob du auf diese Frage eine Antwort
haben möchtest, aber so schwer ist das nicht:

Die projekteigene Antwort:

http://jakarta.apache.org/oro/index.html

The Jakarta-ORO Java classes are a set of text-processing Java
classes that provide Perl5 compatible regular expressions,
AWK-like regular expressions, glob expressions, and utility
classes for performing substitutions, splits, filtering
filenames, etc.
The Jakarta Project is lucky to also be able to offer another
more „lightweight“ regexp solution for you as well as this
package. Options are a good thing and we will leave which one you
choose to use up to you. :smile: They are both perfectly good
packages, we just consider the Jakarta ORO package to be more a
more complete regular expression package.

Das ist im Wesentlichen ein „Wir gehen davon aus, dass
Jakarta-ORO vollständiger ist und Regexp dafür
leichtgewichtiger“, weil ORO z.B. zusätzlich zu Perl, AWK und
hastenichgesehen kompatibel ist und eine ganze Menge
vordefinierte Anwendungsfälle direkt in der API mitbringt.

Da der letzte Satz ein eben solcher einziger ist, werte ich deine
Frage hiermit als bejaht. :wink:

Gruß,
Stefan :smile:

Moin,

Da der letzte Satz ein eben solcher einziger ist, werte ich
deine Frage hiermit als bejaht. :wink:

Danke!

Thorsten