PHP正则表达式搜索多行

时间:2010-05-20 06:34:52

标签: php regex pcre

我在PHP中使用preg_ *来搜索模式<!-- %{data=THIS GETS MATCHED}% -->并提取匹配的文本。

这种模式是:

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

我希望它能够在多行中搜索字符串。例如:

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

如何编辑当前模式以获得此搜索功能?

3 个答案:

答案 0 :(得分:6)

你应该添加“s”pattern modifier,如果没有它匹配任何字符除了换行:

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

答案 1 :(得分:1)

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

我在工作时没有PHP,所以我无法测试它......

答案 2 :(得分:1)

这似乎有效:

<?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
"
}