所有显示的文本这是我在StackOverflow上的第一篇文章,我希望我会尽我所能,尊重所有的规则:)摘自PHP代码
我有一个包含PHP代码的文件。我正在尝试读取文件并仅提取通过回显行显示的文本,而没有动态内容。
这里是一个PHP代码示例,我使用用于测试目的:
some HTML data
<?php
echo 'OK';
echo 'OK'.$ko;
echo $ko.'OK';
echo $ko.'OK'.$ko.'OK'.$ko;
echo 'OK'.$ko.'OK'.$ko;
echo 'OK'.(($data=='toto') ? 'OK' : 'OK2').'OK';
echo someFunction().'OK';
?>
some HTML data
我没有问题通过以下正则表达式中提取从内容的其余部分的PHP代码:
preg_match_all("~<\\?php(.*?)\\?>~siu", $initialContent, $tMatches, PREG_SET_ORDER);
但我没有成功找到如何从回显行中删除PHP代码,并只保留静态内容。 我想要检测的是:
1“echo”;不开始
2不限内容的内容与报价,与相等数目的开闭括号(如果有的话),以及由点精加工; - 或者 - 引号之间的任何内容(检测到转义字符)
在步骤2上循环4次,直到达到“;”。
我该走向正确的方向吗?你能帮我关于我应该用于第2步的正则表达式吗?
在此先感谢!
[更新]
我成功了使用下面的正则表达式(我知道,它不包括回波函数的每一个可能的用法,但我认为这是够了)来匹配回声内容:
preg_match_all("~echo ([^'\"]*?((?<!\\\\)['\"])((?:(?!\\2).)+?|(?-3))*?\\2[^'\"]*?);~siu", $initialContent, $tMatches, PREG_SET_ORDER);
既然我有内容,我必须删除任何PHP代码才能保留静态内容。我打算使用的preg_replace删除该内容,但我没有发现任何的正则表达式来实现这一目标?
你可以遇到这么多的边缘情况下这样做,我不会推荐使用正则表达式,而是http://php.net/token_get_all – Calimero
实际上有很多边缘情况,如回声可以与括号'echo('foo');'等等。我们可以知道这个目标是什么吗?这可能是一个XY问题 – Kaddath
总的想法是,我想向翻译者发送我的页面的所有内容。 对于静态HTML内容没有问题,我删除了HTML标签,我能够(从输入字段)返回占位符,我没有问题,与具有使用DB ... 翻译的错误信息等但有时,我认为有一些PHP基本内容(如一个循环来显示一个阵列的不同线)和它可以发生在直接从PHP代码显示文本。 当然,我可以修改我的所有视图,以避免但这需要大量的时间,而正则表达式会更容易:d – Lionel