Я работаю над переводом сайта (Smarty) с помощью Poedit. Чтобы получить весь текст из файлов .tpl, я использую regex для получения данных между {t} и {/ t}. поэтому пример:Регулярное выражение: чтение значения между несколькими скобками
{t}Password incorrect, please try again{/t}
Регулярное выражение будет читать Password incorrect, please try again
и поместить его в файл .po. Все это прекрасно работает. Это происходит неправильно, когда он становится немного более продвинутым.
Иногда текст между тегами {t} использует параметр. это выглядит так:
{t 1=$email|escape 2=$mailbox}No $1 given, please check your $2{/t}
Это также отлично работает.
Реальная проблема начинается, когда я использовать скобки внутри параметра, как это:
{t 1={site info='name'} 2=$mailbox}visit %1 or go to your %2{/t}
Моя регулярное выражение будет закрыто, когда он видит первые закрывающие скобки, так что результат будет 2=$mailbox}visit %1 or go to your %2
.
Моя регулярное выражение выглядит следующим образом:
\{t.*?\}?[}]([^\{]+)\{\/t\}|\{t\}([^\{]+)\{\/t\}
Регулярное выражение используется внутри программы Java.
Есть ли способ устранить эту проблему?
Исправления написать парсер для обработки вложенных скобок. Regex не очень хорошо справляется с этим типом проблемы. –