【发布时间】:2012-05-25 09:04:30
【问题描述】:
我有一个简单的正则表达式,它检查整个字符串中的函数声明。所以在这段代码中:
public function Test($name)
{
echo 'In test';
}
它会找到第一部分:
function Test($name)
{
它用一个自定义的部分替换它:
function Test($name)
{
echo 'New piece';
这最终使我的代码看起来像这样:
public function Test($name)
{
echo 'New piece';
echo 'In test';
}
这一切都与这个正则表达式完美配合:
preg_match_all ( '/function(.*?)\{/s', $source, $matches )
问题是,当正则表达式看到脚本标记时,我想忽略所有内容。所以在这种情况下,这个来源:
public function Test($name) //<--- Match found!
{
echo 'In test';
}
<script type="text/javascript"> //<--- Script tag found, dont do any matches!
$(function() {
function Test()
{
var bla = "In js";
}
});
</script> //<--- Closed tag, start searching for matches again.
public function Test($name) //<--- Match found!
{
echo 'In test';
}
如何在我的正则表达式中做到这一点?
【问题讨论】:
-
太复杂了。不能只用一个
preg_match_all()。 -
先提取所有的js数据,然后运行你的脚本,然后再次追加你的脚本数据。
-
@RohitKumarChoudhary 这实际上也是一个不错的解决方案。你能给出一个真正的答案吗?如果没有其他人提出更好的建议,我可能会接受。
-
@Vivendi 根据您问题的复杂性,很难在短时间内给出正确的解决方案。我也必须对此进行研究:)
-
如果你只是将代码注入到 javascript 中,更恰当的选择就是挂钩你正在修改的函数。
标签: php regex preg-match preg-match-all