这是我在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来删除这些内容,但我找不到任何正则表达式来实现这个目标...
答案 0 :(得分:0)
当您遇到问题并且打算使用正则表达式解决问题时,现在您有2个问题:)
/['"]([^'"]*)['"]/
希望Regex可以帮助您提取数据。