Что не так с этим многострочным захватом PCRE? - PullRequest
1 голос
/ 02 апреля 2012

PHP:

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

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

Это выводит

x=0, m=Array (
)

Я ожидал

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

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

Я использую модификатор /m. Вариации работают на этом, когда захваченная строка не содержит новых строк. Почему не работает как есть?

1 Ответ

0 голосов
/ 02 апреля 2012

Попробуйте:

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

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

Вам не нужно всего этого побега, плюс вы можете использовать модификатор s для создания. соответствовать новым строкам.

Вышеприведенные выводы показывают, что вы ожидали, независимо от того, решает ли это вашу более широкую проблему или нет, это, конечно, другое дело - я думаю, что вы пытались сделать.

...