Mailinglisten-Archive |
This is a multi-part message in MIME format. ------=_NextPart_000_0161_01C132BC.90689CE0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit Hallo, wie Ihr vielleicht alle wisst oder auch nicht, ich hab seinerseits die neuen PCRE Funktionen, welche von Andrei Zmievski zusätzlich zu den POSIX kompatiblen Regulären Ausdrücken in PHP eingeflossen sind und von Andrei auch dokumentiert worden sind, für Andrei formatiert. Es liegt mir nun eine deutsche Übersetzung eines Teiles von http://php.net/pcre.pattern.syntax vor und möchte nun wissen ob diese Übersetzung Fehler enthält. Ich weiß, dass es auf der ML Liste einige Leute geben wird, die sich intensiver mit den Perl Compatiblen Regular Expressions auseinandergesetzt haben als ich. Falls jemand Fehler entdeckt, dann eine PM an mich und es wird dann im Deutschen PHP Handbuch erscheinen. Änderungsvorschläge werden bis zum Samstag entgegengenommen. -Egon ------=_NextPart_000_0161_01C132BC.90689CE0 Content-Type: text/plain; name="pcre1.txt" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="pcre1.txt" 1. Als Standard wird jedes Zeichen, das die C-Funktion=20 isspace() best=E4tigt, als Whitespace interpretiert, es ist=20 jedoch m=F6glich, PCRE mit alternativen Zeichentabellen zu=20 kompilieren. Normalerweise best=E4tigt isspace()=20 Leerzeichen, Formularvorschub, Zeilenvorschub, Neue=20 Zeile, Horizontaltabulator und Vertikaltbulator als=20 Whitespace. In Perl 5 geh=F6rt der Vertikaltabulator nicht=20 mehr zur Menge der Whitespaces. Das \v Zeichen, das lange=20 in der Perl Dokumentation enthalten war, wurde nie=20 richtig beachtet. Das Zeichen wurde jedoch mindestens bis=20 zur Version 5.002 als Whitespace behandelt. In den=20 Versionen 5.004 und 5.005 passt es nicht auf \s. 2. PCRE erlaubt keine Wiederholungen von Quantifizierern=20 bei Vorausdeklarationen. W=E4hrend das in Perl erlaubt ist,=20 kann es sein, dass sie nicht das sind, was Sie denken.=20 Zum Beispiel bedeutet (?!z){3} nicht, dass die n=E4chsten=20 drei Zeichen keine "z" sind, sondern es bedeutet, dass=20 das n=E4chste Zeichen kein "z" ist, und das dreimal=20 hintereinander. 3. Die Vorkommen von Untermustern in verneinten=20 Vorausdeklarationen werden zwar gez=E4hlt, aber ihre=20 Eintr=E4ge im Offset-Vektor werden nicht eingef=FCgt. Perl=20 setzt seine numerischen Variablen f=FCr alle Muster, die=20 gefunden werden, bevor eine =DCbereinstimmung mit der=20 Deklaration fehlschl=E4gt (hintereinander ausgef=FChrt), aber=20 nur, wenn die verneinte Vorausdeklaration nur einen Zweig=20 hat. 4. Obwohl bin=E4re Nullzeichen in dem zu durchsuchenden=20 String erlaubt sind, sind sie im Suchmuster nicht=20 erlaubt, weil dieser als normaler C-String, der mit Null=20 abgeschlossen wird, =FCbergeben wird. Im Suchstring kann=20 das Escapezeichen "\0" benutzt werden, um ein bin=E4res=20 Nullzeichen darzustellen. 5. Die folgenden Perl Escapesequenzen werden nicht=20 unterst=FCtzt: \l, \u, \L, \U, \E, \Q, weil diese Zeichen=20 Teile von Perls Funktionen zur Bearbeitung von Strings=20 sind und nicht zur Bibliothek der regul=E4ren Ausdr=FCcke. 6. Die Perl Deklaration \G wird =FCberhaupt nicht=20 unterst=FCtzt. 7. Offensichtlich unterst=FCtzt die PCRE das Suchmuster=20 (?{code}) nicht. 8. Es gibt derzeit ein paar Ungereimtheiten in Perl=20 5.005_02 bei den Einstellungen f=FCr die gefundenen=20 Zeichenketten, wenn Teile des Suchmusters wiederholt=20 werden. Wenn man beispielsweise "aba" gegen das Muster=20 /^(a(b)?)+$/ testet, wird $2 auf den Wert "b" gesetzt,=20 wenn man aber "aabbaa" gegen das Muster /^(aa(bb)?)+$/=20 testet, bleibt die Variable $2 ungesetzt. Wenn jedoch das=20 Muster auf /^(aa(b(b))?)+$/ abge=E4ndert wird, wird die=20 Variable $2 (und $3) gesetzt. 9. In Perl 5.004 wird in beiden F=E4llen die Variable $2=20 gesetzt, das gilt auch f=FCr PCRE. Wenn Perl in zuk=FCnftigen=20 Versionen einen anderen konsistenten Staus implementiert,=20 kann sich PCRE auch ver=E4ndern, um sich daran anzupassen. 10. Eine andere, bis jetzt noch ungel=F6ste, Diskrepanz=20 ist, dass in Perl 5.005_02 das Muster /^(a)?(?(1)a|b)+$/=20 auf den String "a" passt und in PCRE nicht. In beiden,=20 Perl und PCRE, l=E4sst das Muster /^(a)?a/ auf den String=20 "a" angewendet, die Variable $1 leer. 11. PCRE erweitert die Bibliothek der regul=E4ren Ausdr=FCcke=20 auf folgende Weise: (a) Obwohl nachgestellte Deklarationen Strings fester=20 L=E4nge finden muss, kann jeder verschiedene Zweig einer=20 nachgestellten Deklaration Strings unterschiedlicher=20 L=E4nge finden. In Perl 5.005 m=FCssen Sie alle dieselbe=20 L=E4nge haben. (b) Falls PCRE_DOLLAR_ENDONLY gesetzt ist und=20 PCRE_MULTILINE nicht, passt das Dollarzeichen $ nur auf=20 das allerletzte Ende eines Strings. (c) Falls PCRE_EXTRA gesetzt ist, verursacht ein=20 Backslash ohne eine bestimmte Definition f=FCr eine=20 Zeichenklasse einen Fehler (z.B. \z ist ung=FCltig, aber \w=20 ([a-zA-Z0-9_]) w=E4re g=FCltig.) (d) Falls PCRE_UNGREEDY gesetzt ist, wird die=20 'greediness' der Wiederholungs-Quantifizierer umgekehrt,=20 das heisst, standardm=E4ssig sind sie greedy, PCRE_UNGREEDY=20 kehrt den Standard um und setzt sie auf ungreedy. (z.B.=20 .*? ist greedy, wenn PCRE_UNGREEDY gesetzt ist.) ------=_NextPart_000_0161_01C132BC.90689CE0--
php::bar PHP Wiki - Listenarchive