2011-08-19 76 views
1

我尝试使用Apache骆驼(与Spring XML)来检查邮件正文中的正则表达式匹配Apache的骆驼正则表达式运算符:不匹配

<when> 
    <simple>${body} regex 'https?://(?:www\.)?twitter\.com[^\w]+'</simple> 
    <to uri="activemq:queue:test"/> 
</when> 

所以在邮件的正文http://www.twitter.com/user应该被移到到'测试'队列。

正则表达式匹配Rad正则表达式设计器,但Camel仍然没有将消息移动到'test'队列。任何想法为什么这不起作用?

+0

它会工作在任何正则表达式?你写了一个测试用例吗? – chrislovecnm

+0

是的,它确实工作在一个非常基本的正则表达式..我认为这个问题可能是它在Rad Designer App中的部分匹配,但后来Camel正在寻找一个完整匹配。如果是这种情况,那么也许我需要调查在骆驼中的正则表达式是否可以切换到某种类型的部分匹配。 – finoutlook

+0

骆驼正在使用JDK reg exp,所以我建议编写一些java代码来测试reg exp以使其在Java中工作。 –

回答

2

java.util.regex需要完全匹配,所以如果这是Apache Camel使用的(?),那么你的假设是正确的。最简单的解决方法是在正则表达式之前和之后放置“。*”吗?

+0

只有在使用'matches()'方法时才是如此; 'find()'像大多数其他正则表达式工具一样进行子字符串匹配。然而,这是我能看出为什么这个正则表达式会失败的唯一原因,所以+1。 –

0

为我工作的解决方案是:

<simple>${body} regex '(?:https?://)?(?:w{3}\.)?twitter\.com(?:/.*|/)?'</simple> 

其中包含了一些细微的修改。最大的是通配符*,最后是匹配任何事物(只要它先有斜线)。

感谢您的帮助和建议。*