perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 22
Click for quality!




11.02.2012 / 18:08

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  PHP: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragRegex
Seitenanfang
Hallo,

ich mache gerade die ersten Gehversuche mit den re. Ausdrücken. Ich komme hier einfach nicht weiter:

$pat1 = '\b^[0-9]{1,2}+px\b$';

//Sollte wahr sein
$test1 = "12px";

//Sollte wahr sein
$test2 = "12px 12px";

// Sollte wahr sein
$test3 = "14px 15px 16px 17px";

//Sollte nicht wahr sein
$test4 = "123 px";

//Sollte nichtw ahr sein
$test5 = "14px 15px 16px 17px 18px";

Wie muss ich den regulären Ausdruck verändern, damit mir $test2 und $test3 auch als wahr ausgegeben werden und nicht nur $test1.

Ein $pat1 = '(\b^[0-9]{1,2}+px\b$){1,2,3,4}'; hilft mir nicht weiter.

Vielen Dank Thomas

Datum: 13.09.2005-08:44

Beitragre: Regex
Seitenanfang
Zu deinem Pattern:
Das ^ steht fuer den Anfang des Strings. Da kann keine Wortgrenze \b vorher kommen.

Wiederholungsangaben entweder mit {1,2} oder mit + oder * aber nicht beides gleichzeitig. Wird unuebersichtlich und bringt auch nichts.

Statt dem Klammerwust mit [0-9]{1,2} wuerde ich lieber \d\d? nehmen, das ist nicht nur kuerzer, sondern auch uebersichtlicher und laeuft schneller.

Was Du suchst ist vermutlich das hier:
Eine oder zwei Zahlen \d\d? gefolgt von px dem ein oder kein Leerzeichen folgt. Das ganze 1 bis 4 mal hintereinander.Als Code dann:

$x = '12px 34px 56px 78px';
print 'match' if $x =~ /^(?:\d\d?px ?){1,4}$/

Wenn Du ein wirklich gutes Buch zum Thema suchst kann ich Dir "Reguläre Ausdrücke" von Jeffrey E. F. Friedl aus dem O'Reilly Verlag ans Herz legen. Vorsicht es gibt 2 Ausgaben: eine von 2001 und ene von 2003.

Datum: 13.09.2005-09:27

Beitragre: Regex
Seitenanfang
Hej,

genau das habe ich gesucht.

Kannst du bitte kurz erklären was hier genau vorgeht?

/^(?:\d\d?px ?){1,4}$/

\d\d? und {1,4} ist mit klar

Aber was bedeutet ?: und das ? am Ende?

Dein Lektüren Tipp werde ich mir bei Gelegenheit ansehen und wahrscheinlich auch zulegen. Bi Oreilly macht man ja nix verkehrt :-)

Thomas

Datum: 13.09.2005-09:47

Beitragre: Regex
Seitenanfang
Also, zuerst zum (?: )

Normalerweise sind Klammern zum "auffangen" eines Teils vom Match. Mit dem ?: als erstes in den Klammern wird zwar als Gruppe zusammengefasst (auf die sich dann das {1,4} bezieht), aber nicht in $1 kopiert. Ist einfach nur performanter.

Zum letzten ? in der Klammer:

Das bezieht sich auf das Leerzeichen davor und bedeutet 0 oder 1. Ist da drin, da am Ende des Strings wahrscheinlich kein Leerzeichen nach dem 'px' folgt.

Sonst: perldoc perlre

Datum: 13.09.2005-17:50

-






-
-