Regex для сопоставления разметки в разметке PHPish? - PullRequest
0 голосов
/ 14 февраля 2010

Я создаю проект, и мне нужно иметь возможность использовать регулярные выражения (или, если что-то еще предпочтительнее?)

По сути, мне нужно преобразовать кодовую страницу разметки PHPish, чтобы «не код» был преобразован в «код». Например:

Orginal:

<?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)

Возможно ли это даже с помощью Regex? Я знаю, что вы не должны пытаться анализировать HTML с помощью регулярных выражений, но это не попытка разобрать его, это действительно довольно глупо, как разметка и все такое ..

Кроме того, этот проект на самом деле будет реализован в Ruby (то есть препроцессоре), поэтому, если есть что-то, что есть в Ruby, которое поможет в этом, тогда имейте это в виду.

Я знаю, что код выглядит очень похоже на PHP, но это потому, что он есть, но он не будет реализован в PHP, и используемый «код» фактически не будет PHP, но он будет использовать механизм типа <? для содержания кода в разметке.

Редактировать: также обратите внимание, что языком внутри разметки для всех практических целей может быть Ruby. Таким образом, он может содержать кавычки и комментарии, имеющие закрывающий кодовый тег.

Ответы [ 2 ]

3 голосов
/ 14 февраля 2010

Вы можете использовать token_get_all, чтобы получить поток токенов парсера. Проходите через них и выводите их, когда вы встречаете T_INLINE_HTML, вы можете вместо этого переписать его в оператор echo.

Edit - только что видел, как вы говорите, что используете Ruby. Очевидно, вы не можете использовать токенизер PHP из Ruby. Может быть, вы можете вызвать php через командную строку?

Редактировать 2:

Возможно ли это даже с помощью Regex? Я знаю, что вы не должны пытаться анализировать HTML с помощью регулярных выражений, но это не попытка разобрать его, на самом деле он довольно глуп, как разметка и все такое ..

Хорошо разбирается. Вы можете использовать regexp для разделения вашего ввода на токены (он же токенизация). Поскольку большинство языков являются контекстными, вам придется передавать токены на конечный автомат, который может анализировать код во внутреннем представлении (AST). Это может быть преобразовано в ваш целевой вывод. Это звучит сложно и страшно, но на самом деле это довольно просто, если вы попробовали это пару раз. Я предлагаю вам пройти через это, с помощью Википедии и Google.

0 голосов
/ 14 февраля 2010

Больше пара идей, а не ответ:

Я бы посоветовал вам попытаться найти какое-нибудь регулярное выражение, которое может найти блоки PHP, а затем обернуть все остальное в ваши эхо вместо наоборот

Другим вариантом может быть просмотр токенайзера PHP, но я не уверен, как он работает с разделами HTML вне тегов, я боюсь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...