2012-04-02 14 views
1

PHP:Was ist falsch an dieser mehrkanaligen PCRE-Aufnahme?

$x = preg_match (
    '/^([.\\n\\r]*)\\n\\n/m', 
    "a\nb\nc\n\nd\ne\nf", 
    $m); 

print "x=$x, m="; 
print_r ($m); 

Diese gibt

x=0, m=Array (
) 

I

erwartet
x=1, m=Array (
     [0] => a 
    b 
    c 

    d 
    e 
    f 
     [1] => a 
    b 
    c 
) 

ich den /m Modifikator verwenden. Variationen funktionieren daran, wenn die aufgenommene Zeichenfolge keine neuen Zeilen enthält. Warum funktioniert es nicht so wie es ist?

+0

Das '.' entspricht einem Literalpunkt innerhalb einer Zeichenklasse. –

Antwort

0

Versuchen:

$x = preg_match (
    '/^(.*)\n\n.*/sm', 
    "a\nb\nc\n\nd\ne\nf", 
    $m); 

print "x=$x, m="; 
print_r ($m); 

Sie brauchen nicht, dass alle Entkommen plus Sie können die s Modifikator zu machen. Übereinstimmung mit Zeilenumbrüchen.

Die obigen Ausgaben, was Sie erwartet haben, ob es Ihr breiteres Problem löst oder nicht, ist natürlich eine andere Sache - es ist meine beste Vermutung für das, was Sie versuchten zu tun.