使用正则表达式查找 PHP
我需要一个可以在文件中查找 PHP 代码块的 REGEX。例如:
<? 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 解析时将返回:
array(
"<? print '<?xml version=\"1.0\" encoding="UTF-8"?>';?>",
"<? echo \"stuff\"; ?>"
);
您可以假设 PHP 是有效的。
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>
When parsed would by the REGEX would return:
array(
"<? print '<?xml version=\"1.0\" encoding="UTF-8"?>';?>",
"<? echo \"stuff\"; ?>"
);
You can assume the PHP is valid.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
使用
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.这种任务类型更适合自定义解析器。您可以相对轻松地使用堆栈构建一个,我可以保证您会比尝试调试正则表达式更快地完成并且更少的麻烦。
如果使用得当,正则表达式是很好的工具,但并非所有文本解析任务都是相同的。
This is the type of task that is much better suited for a custom parser. You could relatively easily construct one using a stack and I can guarantee you will be done much quicker and pull less hair out than you would trying to debug your regex.
Regular expressions are great tools when used appropriately but not all text parsing tasks are equal.
使用
preg_match()
尝试以下正则表达式这尚未经过测试,但只是一个开始。它假定有一个 PHP 结束标签(可以说是格式良好的)。
Try the following regex using
preg_match()
That's untested, but is a start. It assumes a closing PHP tag (arguably well-formed).
尝试这个正则表达式(未经测试):
Try this regex(untested):
使用以下修饰符:
点匹配换行符
^&匹配换行符
with the following modifiers:
Dot match newlines
^& match at line breaks