使用 REGEX 查找 PHP [英] Find PHP with REGEX
本文介绍了使用 REGEX 查找 PHP的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要一个可以在文件中查找 PHP 代码块的 REGEX.例如:
I need a REGEX that can find blocks of PHP code in a file. For example:
<? print '<?xml version="1.0" encoding="UTF-8"?>';?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<?php echo "stuff"; ?>
</head>
<html>
当被 REGEX 解析时会返回:
When parsed would by the REGEX would return:
array(
"<? print '<?xml version=\"1.0\" encoding="UTF-8"?>';?>",
"<? echo \"stuff\"; ?>"
);
您可以假设 PHP 是有效的.
You can assume the PHP is valid.
推荐答案
With token_get_all
您将获得给定 PHP 代码的 PHP 语言标记 列表.然后您只需要迭代列表,查找打开标记标记和相应的关闭标记.
With token_get_all
you get a list of PHP language tokens of a given PHP code. Then you just need to iterate the list, look for the open tag tokens and for the corresponding close tags.
$blocks = array();
$opened = false;
foreach (token_get_all($code) as $token) {
if (!$opened) {
if (is_array($token) && ($token[0] === T_OPEN_TAG || $token[0] === T_OPEN_TAG_WITH_ECHO)) {
$opened = true;
$buffer = $token[1];
}
} else {
if (is_array($token)) {
$buffer .= $token[1];
if ($token[0] === T_CLOSE_TAG) {
$opened = false;
$blocks[] = $buffer;
}
} else {
$buffer .= $token;
}
}
}
这篇关于使用 REGEX 查找 PHP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文