1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| $i = 1; // toutes ces patterns réussissent
if ( preg_match('~^\d{3}$~', "123", $match) )
echo $i++, ') ', $match[0], PHP_EOL; // 123 (comme on peut s'y attendre)
if ( preg_match('~^\d{3}$~', "123\n", $match) ) // séquence de nouvelle ligne UNIX
echo $i++, ') ', $match[0], PHP_EOL; // 123 (et pourtant ce n'est pas la fin de la chaîne)
// même comportement si je modifie la séquence de nouvelle ligne par défaut
if ( preg_match('~(*CR)^\d{3}$~', "123\r", $match) ) // séquence de nouvelle ligne Apple jusqu'à Mac OS9
echo $i++, ') ', $match[0], PHP_EOL; // 123
if ( preg_match('~(*CRLF)^\d{3}$~', "123\r\n", $match) ) // séquence de nouvelle ligne Microsoft, mais aussi AMSTRAD CPC, PALM OS, OS/2 et PC DOS.
echo $i++, ') ', $match[0], PHP_EOL; // 123
if ( preg_match('~(*NUL)^\d{3}$~', "123\x00", $match) ) // fin de chaîne C
echo $i++, ') ', $match[0], PHP_EOL; // 123
if ( preg_match('~(*ANY)^\d{3}$~', "123\x85", $match) ) // ANY signifie n'importe quelle séquence de saut de ligne (y compris les précédentes). \x85 correspond au caractère NEL utilisé sur les systèmes mainframe z/OS et i5/OS d'IBM
echo $i++, ') ', $match[0], PHP_EOL; // 123
// il en existe d'autres plus exotiques encore comme le séparateur de ligne LS (U+2028) ou le séparateur de paragraphes PS (U+2029) qui seront identifiées avec (*ANY) |
Partager