从PHP代码

时间:2017-10-19 10:02:44

标签: php regex pcre

这是我在StackOverflow中的第一篇文章,我希望我会尽力遵守所有规则:)

我有一个包含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);

但是我没有成功找到如何从echo行中删除PHP代码,并且只保留静态内容。 我想要检测的是:

1“echo”一词;

2任何内容内容不以引号开头,具有相同数量的左右括号(如果有),并以一个点结束; - 或 - 引号之间的任何内容(检测转义字符)

步骤2中的

4循环,直到我到达“;”。

我正朝着正确的方向前进吗?关于我应该用于第2步的正则表达式,你能帮我吗?

提前致谢!

[UPDATE]

我成功地使用以下正则表达式匹配echo内容(我知道它不包括echo函数的所有可能用法,但我认为现在已经足够了):

preg_match_all("~echo ([^'\"]*?((?<!\\\\)['\"])((?:(?!\\2).)+?|(?-3))*?\\2[^'\"]*?);~siu", $initialContent, $tMatches, PREG_SET_ORDER);

现在我有了内容,我必须删除任何PHP代码才能保留静态内容。我打算使用preg_replace来删除这些内容,但我找不到任何正则表达式来实现这个目标...

1 个答案:

答案 0 :(得分:0)

当您遇到问题并且打算使用正则表达式解决问题时,现在您有2个问题:)

/['"]([^'"]*)['"]/

希望Regex可以帮助您提取数据。