Java Camel中的正则表达式匹配器

Java Camel中的正则表达式匹配器,java,regex,jms,apache-camel,activemq,Java,Regex,Jms,Apache Camel,Activemq,我正在尝试想出一个驼峰路由,只有当消息与给定的正则表达式匹配时,才会将消息发送到jms队列 我的路线是: <route id="testRoute"> <from uri="jms:queue:Q.Order1" /> <choice> <when> <simple>${body} regex '\w+.*'</simple> &l

我正在尝试想出一个驼峰路由,只有当消息与给定的正则表达式匹配时,才会将消息发送到jms队列

我的路线是:

<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>
但是,如果我的消息是这样,它将失败:

00000001002     REXRYAN 004                                                           
00000002076006490993999900000
为什么第二条消息无法通过regex,需要在regex中修改什么才能通过第二条消息?
谢谢

在正则表达式中,
默认情况下与大多数语言中的换行符不匹配。在您的情况下,您有一个多行字符串,因此正文与regex
\w+.*
不匹配,因为只有第一行匹配

通常有两种方法可以绕过此过程:

  • 使用一个修饰符/标志,使
    也匹配换行符(但我不知道Camel,所以我不能确定如何做到这一点,尽管在正则表达式的开头添加
    (?s)
    ,可能会使这项工作正常,因为这相当于设置特定的修饰符/标志)

  • 使用同时包含字符及其否定的类

    例如,
    [\s\s]
    包含
    \s
    (包含换行符的空白字符)和与非空白字符匹配的
    \s
    。它们一起将匹配所有内容,因为
    \S
    将匹配所有
    \S
    不匹配的内容

    您也可以使用
    [\w\w]
    来给出相同的结果,或者使用
    [\d\d]
    或类似的构造


  • 尝试使用
    [\s\s]
    而不是正则表达式中的
    ?将正则表达式更改为“\w+\s\s*”……但不起作用。@user1717230您没有使用方括号?“\w+[\s\s]*”起作用了……如果您不介意的话……您能解释一下发生了什么……请……我知道答案是其中一种方式+1'ed.:)如果有两行以上的话,这也行吗。。。?
    00000001002     REXRYAN 004                                                           
    00000002076006490993999900000