Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 用于在PHPish标记中匹配标记的正则表达式?_Ruby_Regex_Preprocessor - Fatal编程技术网

Ruby 用于在PHPish标记中匹配标记的正则表达式?

Ruby 用于在PHPish标记中匹配标记的正则表达式?,ruby,regex,preprocessor,Ruby,Regex,Preprocessor,我正在创建一个项目,我需要能够使用正则表达式(或者如果有其他更好的方法?) 基本上,我需要转换PHPish标记代码页,以便将“非代码”转换为“代码”。例如: 原始: <?code echo 'some text'; ?> <head> </head> <body> </body> <?code echo '</html>'; ?> 转换: <?code echo '<html>

我正在创建一个项目,我需要能够使用正则表达式(或者如果有其他更好的方法?)

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

原始:

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

转换:

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

在考虑报价的同时,这怎么可能起作用呢?(如

另外,如果有人向我提供了检测包含文件的内容(替换为先“预插入”文件然后再包含它的内容)(其中包含内容类似于PHP)

这在正则表达式中是可能的吗?我知道你不应该尝试用正则表达式解析HTML,但这并不是试图解析它,它真的对标记和所有内容的方式非常愚蠢

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


我知道代码看起来很像PHP,但那是因为它是,但它不会在PHP中实现,使用的“代码”实际上不会是PHP,但它将使用
更多的是一些想法,而不是答案:

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


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

更多的是一些想法,而不是答案:

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

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

您可以使用它来获取解析器标记流。循环遍历它们并将其回显出来,当您遇到
T\u INLINE\u HTML
时,您可以将其重写为回显语句

编辑-刚才看到你说你在使用Ruby。显然,你不能从Ruby内部使用PHP的tokeniser。也许你可以通过命令行调用PHP

编辑2:

这在正则表达式中是可能的吗?我知道你不应该尝试用正则表达式解析HTML,但这并不是试图解析它,它真的对标记和所有内容的方式非常愚蠢

解析正常。您可以使用regexp将输入拆分为标记(也称为标记化)。由于大多数语言都是上下文语言,因此您必须将标记提供给状态机,状态机可以将代码解析为内部表示(AST)。然后可以将其转换为您的目标输出。这听起来很复杂,也很吓人,但如果您尝试过几次,它实际上非常简单。我建议您在Wikipedia和Google的帮助下完成这项工作。

您可以使用它来获取解析器标记流。当您遇到
时,可以循环使用它们并回显它们>T_INLINE_HTML
,然后可以将其重写为echo语句

编辑-刚才看到你说你在使用Ruby。显然,你不能从Ruby内部使用PHP的tokeniser。也许你可以通过命令行调用PHP

编辑2:

这在正则表达式中是可能的吗?我知道你不应该尝试用正则表达式解析HTML,但这并不是试图解析它,它真的对标记和所有内容的方式非常愚蠢



解析正常。您可以使用regexp将输入拆分为标记(也称为标记化)。由于大多数语言都是上下文语言,因此您必须将标记提供给状态机,状态机可以将代码解析为内部表示(AST)。然后可以将其转换为您的目标输出。这听起来很复杂,也很吓人,但如果您尝试过几次,它实际上非常简单。我建议您在Wikipedia和Google的帮助下完成它。

不,regex无法进行这样的替换。您如何编写一个相当快的解析器来完成此操作n?regex肯定能帮上忙吗?对我来说,回显标记看起来很可疑。最后,这就是
的用途。你确定你需要这个吗?你考虑过输出缓冲吗?这实际上与PHP无关,但这是我能解释的最简单的方法。实际上不会有任何PHP被转换,它是用来编写非常简单的东西的我只是想了解PHP是如何进行标记的。好的,但您正在尝试转换PHP(嵌入HTML)源文件,对吗?不仅使用PHP,而且使用Ruby,对吗?不,regex无法进行这样的替换。那么您将如何编写一个相当快的解析器来完成它呢?regex肯定会有帮助吗?对我来说,回显标记看起来很可疑。最后,这就是
的用途。您确定需要它吗?您考虑过输出缓冲吗?This实际上与PHP没有关系,但这是我能解释它的最简单的方式。实际上不会有任何PHP被转换,它是用来编写一些非常类似于PHP如何做标记的东西。好的,但是你正在尝试转换PHP(嵌入HTML)源文件,对吗?不仅使用PHP,而且使用Ruby,对吗?捕获这个PHP块怎么样:
*/?>
Hmm..很好的一点..我想它必须是一个混合解析器..适当地替换所有标记并解析
Fair point中的所有内容,也许标记器可能值得研究一下。事实上,troelskn的答案是t在我看来,这是一个很好的方法。捕获这个PHP块怎么样:
*/?>
Hmm..很好的一点..我想它必须是一个混合解析器..适当地替换所有标记并在
公平点中解析所有内容,也许标记器可能值得研究一下。事实上,troelskn的答案在我看来是正确的。不,这不是我想要的(并且标记中的实际代码不会是PHP)…抱歉,更改了我的问题以更好地反映我的想法