我正在使用 PHP 中的 preg_* 函数来搜索模式 <!-- %{data=THIS GETS MATCHED}% -->
并提取匹配的文本。
该模式为:
preg_match('#<!-- %{' . $knownString . '\s*=\s*(.*?)}% -->#', ...)
我希望它可以在多行中搜索字符串。例如:
<!-- %{data=
THIS GETS
MATCHED AND
RETURNED
}% -->
如何修改当前模式以实现搜索功能?
preg_match('#<!-- %{' . $knownString . '\s*=\s*(.*?)}% -->#s', ...)
这似乎有效:
<?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
"
}
m
,或多行模式,改变了 ^
和 $
锚点的含义,使它们能够在行边界上匹配,而不仅仅是在字符串的开头和结尾。你的正则表达式之所以有效,是因为你将点号改为了 ([^\\}]
;m
是无关紧要的。 - Alan Moorepreg_match('#<!-- %{' . $knownString . '\s*=\s*(.*?)}% -->#s', ...)
这段代码能用吗?
我现在工作的地方没有 PHP,所以无法测试它...
/<!-- %{' . $knownString . '=\s*(.*?)}% -->/s
让它起作用。然而,我很糟糕的正则表达式,所以如果你看到它想着“...哈哈?”。请告诉我 xD - dave