Java Camel中的正则表达式匹配器
我正在尝试想出一个驼峰路由,只有当消息与给定的正则表达式匹配时,才会将消息发送到jms队列 我的路线是: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
<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