我想根据内容来路由消息,但是这样做的正则表达式与我抛出的内容不匹配。为什么会这样?
我尝试了一些在线正则表达式测试网站,在这些网站上,我获得了完整的比赛。我还对正则表达式进行了调整,使其适应".*\{value=1\}.*"
,它可以按预期工作,但是我认为我的原始解决方案可能更强大。
这是我的路线:
<from uri="milo-client:opc.tcp://localhost:12685?allowedSecurityPolicies=None&node=RAW(ns=2;s=items-machine_lfm_reset)&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语句未得到满足。
答案 0 :(得分:0)
您的输入实际上与此正则表达式不匹配。简单函数regex
使用Matcher#matches()
方法,该方法仅在完全匹配时返回true。
如果您在某些测试仪网站上看到此正则表达式匹配,则可能使用的是Matcher#find()
,即使部分匹配也返回true。
https://www.regexplanet.com/share/index.html?share=yyyydc68p6r
返回: 当且仅当整个区域序列与该匹配器的模式匹配时才为真