java - Camel 中的正则表达式匹配器

标签 java regex jms apache-camel activemq

我正在尝试提出一个 Camel 路由,其中​​只有与给定的正则表达式匹配的消息才会被发送到 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>

如果我的消息。是这样的,它很好地通过了正则表达式:

000000010020140507

但是,如果我的消息是这样的,它就会失败:

00000001002     REXRYAN 004                                                           
00000002076006490993999900000

为什么第二条消息无法通过正则表达式,需要修改正则表达式中的哪些内容才能传递第二条消息? 谢谢

最佳答案

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

通常有两种方法可以绕过这个问题:

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

  2. 使用包含字符及其否定的类。

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

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

关于java - Camel 中的正则表达式匹配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23550743/

相关文章:

java - 如何从 Java HTTPResponse 解析 JSON?

java - 从 XPath 查询中获取空值

java - 带有按钮和静态字符串数组的 ListView

java - 为什么Java中没有必要重写接口(interface)Comparator的两种方法

java - 发送到 JMS 队列的消息将仅由单个消费者消费?

jms - 5000 毫秒后无法连接到代理 URL [JMS]

java - ActiveMQ 中的跨语言支持

java - 如何在 Java 中使用正则表达式从 YouTube URL 获取视频 ID

java - 从 java 日志文件中读取特定堆栈跟踪的模式

regex - 将全角字符转换为半角字符