Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7920[/thread]

RegExp PHP -> Perl: preg_split



<< >> 8 Einträge, 1 Seite
MartinR
 2006-04-24 13:40
#65276 #65276
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
Hi,

ich habe folgende zwei PHP Zeilen und verstehe nicht ganz (vorallem das \x01\x09\x01\x16 ) was die machen bzw. wie ich die in Perl schreiben muss.

Code: (dl )
1
2
$tmp=preg_split("/\x01\x09\x01\x16/",$sig_decode);
$this->email= substr($tmp[1],1,ord(substr($tmp[1],0,1)));


In $sig_decode steht ein String, den ich wie folgt erhalten habe:
Code: (dl )
1
2
use MIME::Base64;
my $sig_decode = decode_base64($code);


Die erste Zeile wird wahrscheinlich ein

Code: (dl )
my @Array = split( ... , $sig_decode);


werden. Aber wie lauten die ... im split?
Crian
 2006-04-24 13:50
#65277 #65277
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Ich kenn PHP nicht, aber hast du mal probiert, den RE einfach zu übernehmen?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
nepos
 2006-04-24 14:46
#65278 #65278
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Das \x01 usw. ist nur die hexadezimale Schreibweise fuer bestimmte Zeichen. \x09 ist zum Beispiel in TAB. Die RegEx sollte in Perl eigentlich 1:1 funktionieren. Die Schreibweise mit \x... steht auch so in perlre drin.
MartinR
 2006-04-24 15:03
#65279 #65279
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
Danke Euch!

Problem gelöst. Mich haben die Slashes / am Anfang und am Ende irritiert. Weggelassen und es geht.
Dubu
 2006-04-24 15:21
#65280 #65280
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Eigentlich solltest du die Anführungszeichen weglassen und die Slashes lassen.


Edit: Das sollte ich natürlich noch begründen.
preg_split() steht für "split mit Perl-kompatiblen regulären Ausdrücken". (Neben preg_split() gibt es in PHP noch mehr preg_* Funktionen.)

In Perl besteht der Standard-Begrenzer für reguläre Ausdrücke aus Schrägstrichen: /ausdruck/. Man findet sie nicht nur beim Match-Operator ($foo =~ /ausdruck/), sondern auch bei split(), da auch split als ersten Parameter einen regulären Ausdruck erwartet: split /ausdruck/, $string. Die Schrägstriche weisen hier noch extra darauf darauf hin, dass der Trennausdruck kein "normaler String" ist.

Warum benutzt man aber in PHP die Schrägstriche noch zusätzlich innerhalb der Anführungsstriche? Das liegt daran, dass auch in PHP hinter einem regulären Ausdruck noch Modifier stehen können (z.B. "i" für das Ignorieren von Groß-/Kleinschreibung oder "x", wenn Kommentare und Whitespace im Muster erlaubt sind). Diese Modifier landen dann in PHP hinter den Schrägstrichen, aber noch innerhalb der Anführungszeichen.

Und wie in Perl kann man übrigens auch in PHP andere Begrenzer als die Schrägstriche nehmen, wenn man möchte - sogar ein passendes Klammerpaar wie () oder {}.\n\n

<!--EDIT|Dubu|1145885682-->
MartinR
 2006-04-24 16:27
#65281 #65281
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
... danke für den Hinweis
Relais
 2006-04-24 16:49
#65282 #65282
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=nepos,24.04.2006, 12:46]Die Schreibweise mit \x... steht auch so in perlre drin.[/quote]
Und mit perlre ist ntuerlich perlre gemeint.
Weiter gibt es perlrequick
und perlretut ...
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
nepos
 2006-04-25 14:51
#65283 #65283
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Sorry, hatte den passenden Board-Code fuer perldoc nicht im Kopf beim eingeben in der Box fuer schnelle Antworten ;)
<< >> 8 Einträge, 1 Seite



View all threads created 2006-04-24 13:40.