У меня есть ftp-входящая конечная точка, где хранится много файлов (не все для меня), поэтому я добавил фильтр-имя-регулярное выражение с различными регулярными выражениями, которые я хочу извлечь из каталога FTP :Mule выражение regex issue
<file:filename-regex-filter pattern="
${environment}\.TEST.xml,
0\.${environment}\.REPD\.(.*).GZ,
${environment}(.*)PERSONNOTI(.*)\.xml\.gz,
${environment}(.*)PERSONNOTI(.*)voucher\.xml" caseSensitive="false" />
Это прекрасно работает, но теперь я хочу выполнить конкретное поведение, основанное на типе файла. Поэтому я использую компонент выбора с разными выражениями:
Моя первая идея состояла в том, чтобы использовать компонент выбора, когда выражения, которые используют те же регулярные выражения, которые используются в filename-regex-filter и которые работают там:
<when expression="#[message.inboundProperties.originalFilename.matches('0\.${environment}\.REPD\.(.*).GZ')]">
// Specific behaviour for this type of files
</when>
Это произвело следующее сообщение об ошибке:
Exception stack is:
1. [Error: illegal escape sequence: .]
[Near : {... age.inboundProperties.originalFilename.matches('0\.T\.REPD\.(.*).GZ') ....}]
^
[Line: 1, Column: 55] (org.mule.api.expression.InvalidExpressionException)
org.mule.el.mvel.MVELExpressionLanguage:238(http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/expression/InvalidExpressionException.html)
2. [Error: illegal escape sequence: .]
[Near : {... age.inboundProperties.originalFilename.matches('0\.T\.REPD(.*).GZ') ....}]
Это означает, что выражение атрибута doensn't ожидать избежать символов, поэтому я решил не бежать им
<when expression="#[message.inboundProperties['originalFilename'].matches('${environment}.TEST.xml')]">
//Specific behavior for this type of files...
</when>
<when expression="#[message.inboundProperties.originalFilename.matches('0.${environment}.REPD.*.GZ')]">
//Specific behavior for this type of files...
</when>
<otherwise>
<file:outbound-endpoint path="C:/test/result/other" responseTimeout="10000" outputPattern="#[message.inboundProperties.originalFilename]"/>
</otherwise>
Здесь сообщение всегда направляется к иным пунктом, для первого выражения, где не используются специальные символы, кроме ...
Это хорошая практика, чтобы работать с выражениями, когда, и что такое правильный способ выражения выражения?
Ваш вход смешивается с вашим регулярным выражением, поэтому, если вы включаете специальные символы регулярного выражения на входе, они в конечном итоге синтаксис вашего регулярного выражения. Поэтому вам либо нужно правильно вписать их в существующее регулярное выражение, либо избежать их всех: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' \ 'и так далее. [Каким символам нужно ускользнуть.] (Http://stackoverflow.com/questions/399078/what-special-characters-must-be-escaped-in-regular-expressions). Возможно, ваш язык уже имеет что-то вроде 'Regex.Escape()', как это делают некоторые другие языки. Затем просто используйте его в своей последовательности ввода. – miroxlav
Не могли бы вы переместить его из комментария к вопросу? (Включая код, который вы использовали для экранирования). Это сделает ваш вопрос более полным с вашими исследованиями на сегодняшний день и будет легче ответить тем, кто знает эту область. – miroxlav