为什么此正则表达式在我的骆驼路线中不匹配?

时间:2019-06-27 11:38:40

标签: regex xml apache-camel

我想根据内容来路由消息,但是这样做的正则表达式与我抛出的内容不匹配。为什么会这样?

我尝试了一些在线正则表达式测试网站,在这些网站上,我获得了完整的比赛。我还对正则表达式进行了调整,使其适应".*\{value=1\}.*",它可以按预期工作,但是我认为我的原始解决方案可能更强大。

这是我的路线:

<from uri="milo-client:opc.tcp://localhost:12685?allowedSecurityPolicies=None&amp;node=RAW(ns=2;s=items-machine_lfm_reset)&amp;overrideHost=true"/>
<choice>
    <when>
        <simple>${bodyAs(String)} regex "/\bvalue=1\b/"</simple>
        <log message="Value was 1."/>
    </when>
<choice>

这是出现的消息:

DataValue{value=Variant{value=1}, status=StatusCode{name=Good, value=0x00000000, quality=good}, sourceTime=DateTime{utcTime=132061080449440000, javaDate=Thu Jun 27 11:20:44 GMT 2019}, serverTime=DateTime{utcTime=132061080459370000, javaDate=Thu Jun 27 11:20:45 GMT 2019}}

我希望此正则表达式能够匹配,因为如果我在任何正则表达式测试网站上输入消息和正则表达式,都会得到匹配,但实际上我没有得到匹配,并且我的when语句未得到满足。

1 个答案:

答案 0 :(得分:0)

您的输入实际上与此正则表达式不匹配。简单函数regex使用Matcher#matches()方法,该方法仅在完全匹配时返回true。

JDoodle

如果您在某些测试仪网站上看到此正则表达式匹配,则可能使用的是Matcher#find(),即使部分匹配也返回true。

https://www.regexplanet.com/share/index.html?share=yyyydc68p6r

请参见Matcher#matches javadoc

  

返回:   当且仅当整个区域序列与该匹配器的模式匹配时才为真