PHP регулярное выражение для поиска по нескольким строкам - PullRequest
3 голосов
/ 20 мая 2010

Я использую preg_ * в PHP для поиска шаблона <!-- %{data=THIS GETS MATCHED}% --> и извлечения соответствующего текста.

Шаблон для этого:

preg_match('#<!-- %{' . $knownString . '\s*=\s*(.*?)}% -->#', ...)

То, что я хотел бы сделать, это поиск строки по нескольким строкам. Например:

<!-- %{data=
THIS GETS
MATCHED AND
RETURNED
}% -->

Как я могу отредактировать свой текущий шаблон, чтобы иметь эту возможность поиска?

Ответы [ 3 ]

6 голосов
/ 20 мая 2010

Вы должны добавить "s" модификатор шаблона , без него точка соответствует любому символу , за исключением для новой строки:

preg_match('#<!-- %{' . $knownString . '\s*=\s*(.*?)}% -->#s', ...)
1 голос
/ 20 мая 2010

Это похоже на работу:

<?php
    $testString = "<!-- %{data=
THIS GETS
MATCHED AND
RETURNED
}% -->";
    $knownString = "data";
    preg_match( "@<!-- %\\{" . $knownString . "\\s*=\\s*([^\\}]+)\\}% -->@", $testString, $match );
    var_dump( $match );
?>

Возвращается:

array(2) {
  [0]=>
  string(54) "<!-- %{data=
THIS GETS
MATCHED AND
RETURNED
}% -->"
  [1]=>
  string(34) "THIS GETS
MATCHED AND
RETURNED
"
}
1 голос
/ 20 мая 2010

Работает ли preg_match('#<!-- %{' . $knownString . '\s*=\s*(.*?)}% -->#s', ...)?

У меня нет PHP здесь на работе, поэтому я не могу его протестировать ...

...