Php bug preg_match ?

Bonjour,

Les codes php et perl qui suivent ne donnent pas le même résultat, le 1er test php est erroné !

./bug.php
#.+?End#us : KO
#End#us : Ok

./bug.pl
.+?End : Ok
End : Ok

Est-ce que j’ai loupé qqc ou est-ce un bug php ?

Un lecteur sympa pourrait essayer de rejouer les tests et informer de ce qu’il obtient ?

PS : le fihier correspondant est de taille 1Mo … que je n’arrive pas à réduire plus, ‘toutes’ autres modifications entrainant la disparition du problème.

Pour info mon système : Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linux

[code]#!/usr/bin/php

<?php $contenu=file_get_contents('bug.txt'); function test($filtre) { global $contenu; echo $filtre," : "; if ( preg_match($filtre,$contenu) ) echo "Ok\n"; else echo "KO\n"; } test("#.+?End#us"); test("#End#us"); ?>[/code]

[code]#!/usr/bin/perl
use strict;

our $contenu=’’;

sub test {
my $filtre=shift;
print $filtre." : ";
if ( $contenu =~ /$filtre/us ) { print “Ok\n”; } else { print “KO\n”; }
}

open(FIC, ‘bug.txt’);

while () {
$contenu.=$_;
}

test(".+?End");
test(“End”);[/code]
bug.txt (978 KB)

‘Faux problème’ ( voir la réponse sur le forum php ), ce n’est pas un bug, mais il faut tester le retour de la fonction :
1 si trouvé
0 si pas trouvée
False en cas d’erreur -> en l’occurrence débordemenbt du tampon interne !