2014-05-08 3 views
1

Iam пытается придумать верблюжий маршрут, где будет отправлено сообщение в очередь JMS только это, если соответствует данному выражению регулярок ..Regex выражение согласовань в Camel

Маршрута, что у меня есть это:

<route id="testRoute"> 
    <from uri="jms:queue:Q.Order1" /> 
     <choice> 
      <when> 
      <simple>${body} regex '\w+.*'</simple> 
      <to uri="jms:queue:Q.Order2"/>        
      </when> 
     </choice>   
</route> 

Если мой msg. это, она проходит регулярное выражение просто отлично:

000000010020140507 

Однако, если мое сообщ это, он не:

00000001002  REXRYAN 004               
00000002076006490993999900000 

Почему второе сообщение не суметь регулярное выражение, и что должно быть изменено в regex передать второе сообщение? Thanks

+1

Попробуйте использовать '[\ s \ S]' вместо '.' В регулярном выражении? – Jerry

+0

изменил регулярное выражение на '\ w + \ s \ S *' .... но не сработало. – user1717230

+0

@ user1717230 Вы не использовали квадратные скобки? – Jerry

ответ

3

В regex, . по умолчанию не соответствует новой строке на большинстве языков. В вашей ситуации у вас есть многострочная строка, и тело, таким образом, не соответствует регулярному выражению \w+.*, так как соответствует только первая строка.

Есть обычно два способа обойти это:

  1. Используйте модификатор/флаг, который делает . матч новой строки, а также (но я не знаю, верблюд, так что я не могу быть уверен, как это сделать, хотя добавление (?s) в начале регулярного выражения может сделать эту работу так же хорошо, поскольку это эквивалентно настройке этого конкретного модификатора/флага).

  2. Используйте класс, содержащий как символ, так и его отрицание.

    Например, [\s\S] содержит \s (символ пробела, который включает символы перевода строки) и \S, который соответствует символам без пробелов. Вместе они будут соответствовать всем, потому что \S будет соответствовать всем \s не соответствует.

    Вы также можете использовать [\w\W], чтобы получить тот же результат, или [\d\D] или аналогичные конструкции.

+0

Я знал, что ответ был одним из способов. Добавили +1. :) –

+0

Будет ли это работать, если было более двух строк ...? – user1717230

+0

@ user1717230 Yup, он должен работать нормально. – Jerry

Смежные вопросы