我正在创建一个项目,我需要能够使用正则表达式(或者如果有其他更好的东西?)
基本上,我需要转换一个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。因此它可以包含具有结束代码标记的引号和注释。
答案 0 :(得分:3)
您可以使用token_get_all
获取解析器令牌流。循环遍历它们并回显它们,当你遇到T_INLINE_HTML
时,你可以将它重写为一个echo语句。
编辑 - 刚刚看到你说你正在使用Ruby。显然,你不能在Ruby中使用PHP的tokeniser。也许你可以通过命令行调用php?
编辑2:
这是否可以使用正则表达式?我知道你不要试图用正则表达式来解析HTML,但这并不是要解析它,对于标记和一切都是如此真的非常愚蠢。
它解析得很好。您可以使用regexp将输入拆分为标记(也称为标记化)。由于大多数语言都是上下文的,因此您必须将令牌提供给状态机,状态机可以将代码解析为内部表示(AST)。然后可以将其转换为目标输出。这听起来很精致和可怕,但是当你尝试了几次时它真的很简单。我建议你在维基百科和谷歌的帮助下完成它。
答案 1 :(得分:0)
更多的想法而不是答案:
我建议你尝试找一些可以找到PHP块的正则表达式,然后将其他所有内容包装在echo中,而不是反过来。
另一种选择可能是查看PHP tokenizer,但我不确定它如何处理我害怕的标签之外的HTML部分。