Регулярное выражение preg_match_all между определенной функцией

Я создал класс Language, который автоматически переводит строку при передаче через функцию. Сейчас я работаю над инструментом, который позволит мне извлечь все эти фрагменты текста и сохранить их в файле, готовом для индивидуального перевода, хотя у меня возникают некоторые проблемы при сопоставлении только текста между кавычками с регулярным выражением.

Пример HTML:

 <h1><?=$Lang->t("Example text")?></h1>
<h1><?=$Lang->t("Example (text)")?></h1>
<h1><?=$Lang->t("Example %s", 'text')?></h1>

Пример выходов:

Example text
Example (text)
Example %2

Параметр, переданный в третьем примере, должен быть исключен, как показано в выходных данных последнего примера.

Примечание: это должно игнорировать все остальное, что может быть на любой странице, javascript, jQuery, Php и т. Д. И т. Д.

Кто-нибудь может пролить свет на это, пожалуйста? 🙂

0

Решение

Почему бы не использовать то, что уже сделано для вас? GetText

http://www.sitepoint.com/localizing-php-applications-1/

0

Другие решения

Быстрое и грязное решение было бы выражением как это:

$re = <<<'re'
/
\$Lang->t\(
(
" ( (?: \\. | [^"] )* ) "|
' ( (?: \\. | [^'] )* ) '
)
/x
re;

В основном, матч $Lang->t( сопровождаемый одинарной или двойной строкой в ​​кавычках относительно экранирования. Использование следующим образом:

$code = <<<'eof'
<h1><?=$Lang->t("Example text")?></h1>
<h1><?=$Lang->t("Example (text)")?></h1>
<h1><?=$Lang->t("Example %s", 'text')?></h1>
<h1><?=$Lang->t("Example\"foo\"", 'text')?></h1>
<h1><?=$Lang->t('Example\'foo\'', 'text')?></h1>
eof;

preg_match_all($re, $code, $m, PREG_SET_ORDER);
print_r(array_map('end', $m));

Это не является пуленепробиваемым, поскольку регулярные выражения не могут полностью проанализировать язык программирования, но в большинстве случаев будут работать нормально.

0

По вопросам рекламы [email protected]