0

我正在创建一个项目,我需要能够使用正则表达式(或者如果其他东西更可取?)

基本上,我需要转换一个 PHPish 标记代码页,以便将“非代码”转换为“代码”。例如:

原件:

<?code
  echo 'some text';
?>
<head>
</head>
<body>
</body>
<?code
  echo '</html>';
?>

转换:

<?code
  echo '<html>';
  echo '
<head>
</head>
<body>
</body>';
  echo '</html>';
?>

在考虑报价的同时,这如何工作?(喜欢<?code $var='<?code stuff ?>';?>

另外,如果有人向我提供了一些东西来检测包含的文件,(替换为首先“预先拥有”文件然后包含它的东西)(其中包含类似于 PHP)

这甚至可以用正则表达式吗?我知道您不应该尝试使用正则表达式解析 HTML,但这并不是在尝试解析它,它对于标记和所有内容的方式真的很愚蠢..

此外,这个项目实际上将在 Ruby(即预处理器)中实现,所以如果 Ruby 有一些东西可以帮助实现这一点,那就去做吧。

我知道代码看起来与 PHP 非常相似,但那是因为它是,但它不会在 PHP 中实现,并且使用的“代码”实际上也不是 PHP,但它将使用一种<?类型机制在标记中包含代码。

编辑:还请注意,标记内的语言对于所有实际目的都可以是 Ruby。因此它可以包含带有结束代码标记的引号和注释。

4

2 回答 2

3

您可以使用token_get_all来获取解析器令牌流。循环遍历它们并回显它们,当您遇到 时T_INLINE_HTML,您可以将其重写为 echo 语句。

编辑 - 刚刚看到你说你正在使用 Ruby。显然,您不能在 Ruby 中使用 PHP 的标记器。也许您可以通过命令行调用 php?

编辑2:

这甚至可以用正则表达式吗?我知道您不应该尝试使用正则表达式解析 HTML,但这并不是在尝试解析它,它对于标记和所有内容的方式真的很愚蠢..

解析好了。您可以使用正则表达式将您的输入拆分为标记(也称为标记化)。由于大多数语言都是上下文相关的,因此您必须将标记提供给状态机,该状态机可以将代码解析为内部表示(AST)。然后可以将其转换为您的目标输出。这听起来很复杂而且很吓人,但是当你尝试了几次之后,它真的很简单。我建议你在维基百科和谷歌的帮助下完成它。

于 2010-02-14T19:30:11.720 回答
0

更多的想法而不是答案:

我建议您尝试找到一些可以找到 PHP 块的正则表达式,然后将其他所有内容包装在您的 echo 中,而不是反过来。

另一种选择可能是查看 PHP 标记器,但我不确定它如何处理我担心的标签之外的 HTML 部分。

于 2010-02-14T19:22:16.750 回答