Почему этот Regex не работает в FreeMarker - PullRequest
0 голосов
/ 30 апреля 2019

Использование Smooks с Freemarker для преобразования CSV в JSON. При добавлении регулярного выражения с использованием совпадений во Freemarker синтаксис завершается ошибкой и получают следующие исключения. Когда это конкретное условие удаляется, все работает нормально.

Регулярное выражение должно проверять, является ли строка правильным показателем.

Я пробовал такое же регулярное выражение в Java, и оно отлично работает.

<#elseif message?contains("E+") && message?matches("[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?")>

Исключения:

org.milyn.cdr.SmooksConfigurationException: 

Ошибка при вызове метода @Initialize 'initialize' для класса 'org.milyn.templating.freemarker.FreeMarkerTemplateProcessor'.`

org.milyn.cdr.SmooksConfigurationException:

Ошибка загрузки ресурса шаблонов: целевой профиль: [[org.milyn.profile.Profile # default_profile]], селектор: `

1 Ответ

1 голос
/ 01 мая 2019

Сбой, так как \. не является допустимым escape в строковом литерале. (По той же причине компиляция не удалась бы и в Java.) Вы должны либо написать \\. вместо этого (точно так же, как в Java), либо, что еще лучше, начать строковый литерал с r и оставить \. как есть. (r для строкового литерала, который не обрабатывает \ специально): r"[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?"

Кстати, если это действительно все, что показывает Smooks, это не очень полезно. Исключение синтаксического анализа должно быть где-то ... но если нет, вы можете использовать https://try.freemarker.apache.org/, чтобы попробовать свои фрагменты шаблона.

...