diff --git a/src/main/java/chanjarster/weixin/api/WxMessageRouter.java b/src/main/java/chanjarster/weixin/api/WxMessageRouter.java index 1f477a6d..90a2d911 100644 --- a/src/main/java/chanjarster/weixin/api/WxMessageRouter.java +++ b/src/main/java/chanjarster/weixin/api/WxMessageRouter.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.regex.Pattern; import chanjarster.weixin.bean.WxXmlMessage; import chanjarster.weixin.bean.WxXmlOutMessage; @@ -110,6 +111,8 @@ public class WxMessageRouter { private String content; + private String rContent; + private boolean reEnter = false; private List handlers = new ArrayList(); @@ -170,6 +173,16 @@ public class WxMessageRouter { return this; } + /** + * 如果content匹配该正则表达式 + * @param regex + * @return + */ + public Rule rContent(String regex) { + this.rContent = regex; + return this; + } + /** * 设置微信消息拦截器 * @param interceptor @@ -247,6 +260,8 @@ public class WxMessageRouter { (this.eventKey == null || this.eventKey.equals(wxMessage.getEventKey())) && (this.content == null || this.content.equals(wxMessage.getContent() == null ? null : wxMessage.getContent().trim())) + && + (this.rContent == null || Pattern.matches(this.rContent, wxMessage.getContent() == null ? "" : wxMessage.getContent().trim())) ; } diff --git a/src/test/java/chanjarster/weixin/api/WxMessageRouterTest.java b/src/test/java/chanjarster/weixin/api/WxMessageRouterTest.java index fa46bcc1..00268659 100644 --- a/src/test/java/chanjarster/weixin/api/WxMessageRouterTest.java +++ b/src/test/java/chanjarster/weixin/api/WxMessageRouterTest.java @@ -39,6 +39,7 @@ public class WxMessageRouterTest { .rule().async(async).event(WxConsts.EVT_CLICK).handler(new WxEchoMessageHandler(sb, WxConsts.EVT_CLICK)).end() .rule().async(async).eventKey("KEY_1").handler(new WxEchoMessageHandler(sb, "KEY_1")).end() .rule().async(async).content("CONTENT_1").handler(new WxEchoMessageHandler(sb, "CONTENT_1")).end() + .rule().async(async).rContent(".*bc.*").handler(new WxEchoMessageHandler(sb, "abcd")).end() .rule().async(async).handler(new WxEchoMessageHandler(sb, "ALL")).end(); ; } @@ -106,6 +107,9 @@ public class WxMessageRouterTest { WxXmlMessage message5 = new WxXmlMessage(); message5.setContent("BLA"); + WxXmlMessage message6 = new WxXmlMessage(); + message6.setContent("abcd"); + WxXmlMessage c2 = new WxXmlMessage(); c2.setMsgType(WxConsts.XML_MSG_TEXT); c2.setEvent(WxConsts.EVT_CLICK); @@ -127,6 +131,7 @@ public class WxMessageRouterTest { new Object[] { message3, "KEY_1," }, new Object[] { message4, "CONTENT_1," }, new Object[] { message5, "ALL," }, + new Object[] { message6, "abcd," }, new Object[] { c2, "COMBINE_2," }, new Object[] { c3, "COMBINE_3," }, new Object[] { c4, "COMBINE_4," }