2009-04-27 11 views

Répondre

7
$x =~ s/\n.*/... multiline.../s 
modificateur

/s dit Perl pour traiter la chaîne mise en correspondance comme une seule ligne, ce qui provoque . pour correspondre à des sauts de ligne. Ordinairement, ce n'est pas le cas, ce qui entraîne votre comportement observé.

+1

AFAIK, perl n'utilise pas PCRE. PCRE est une bibliothèque pour imiter la syntaxe perl regex. – obecalp

+0

Mon intention était PCRE, pas comme une bibliothèque spécifique, mais comme l'ensemble général des moteurs d'expressions régulières compatibles avec Perl, y compris Perl. Peut-être que mon utilisation est inappropriée. – chaos

+1

Alors, comment sommes-nous censés étiqueter les questions qui se rapportent à la bibliothèque PCRE? Quoi qu'il en soit, tous les arômes regex "compatibles Perl" n'utilisent pas/s (ou/m,/i, etc.). Les langages sans littéraux regex, comme Python, Java et .NET, utilisent à la place des drapeaux de compilation comme "DOTALL" ou "SingleLine". –

2

Vous devez utiliser le modificateur 's' sur votre regex, de sorte que le point '.' correspondra à toutes les nouvelles lignes suivantes. Donc ceci:

$x =~ s/\n.*/... multiline.../; 

Devient ceci:

$x =~ s/\n.*/... multiline.../s; 
Questions connexes