Java 有人能检查一下这个正则表达式吗?

Java 有人能检查一下这个正则表达式吗?,java,regex,spring,apache-camel,lookbehind,Java,Regex,Spring,Apache Camel,Lookbehind,我只需要验证这个正则表达式是否能满足我的要求 给定以下json字符串 {"a":"1","Provider":"WebHook","b":"2"} 我需要确保以下正则表达式 (?<=\bProvider":")\w+ (?虽然解析是这里的正确解决方案,但满足条件的正则表达式并不难构造: /"Provider":"(.*?)"/ 使用perl风格的正则表达式好的,谢谢大家的建议。我咬紧牙关,以正确的方式做事,而不是解析正则表达式。以下是我的解决方案: 我构建了一个使用org.codeh

我只需要验证这个正则表达式是否能满足我的要求

给定以下json字符串

{"a":"1","Provider":"WebHook","b":"2"}
我需要确保以下正则表达式

(?<=\bProvider":")\w+

(?虽然解析是这里的正确解决方案,但满足条件的正则表达式并不难构造:

/"Provider":"(.*?)"/

使用perl风格的正则表达式

好的,谢谢大家的建议。我咬紧牙关,以正确的方式做事,而不是解析正则表达式。以下是我的解决方案:

我构建了一个使用org.codehaus.jackson.map.ObjectMapper的服务。这个类将exchange主体作为参数。它如下所示

public class ProviderTypeWrangler {

    public String getProvider(String json) {

        try {

            ObjectMapper mapper = new ObjectMapper();
            Integration integration;
            integration = mapper.readValue(json, Integration.class);
            return integration.getProvider();
        } catch (JsonParseException e) {
            return "";
        } catch (JsonMappingException e) {
            return "";
        } catch (IOException e) {
            return "";
        }

    }

}
然后,我使用该模式提供对该服务的访问。如果有人认为另一个EIP是合适的,我愿意听取建议。无论如何,下面是一个例子

public class WufooIntegrationRoutingSlip {

    @RoutingSlip
    public String slip(String body) {
        String answer = "activemq:noProducerDefined";
        ProviderTypeWrangler wrangler = new ProviderTypeWrangler();
        String producer = wrangler.getProvider(body);
        Logger mylogger = Logger.getLogger("log4j.logger.org.apache.camel");
        if (!producer.equals("")) {
            mylogger.info("Body:"+body);
            answer = "activemq:"+producer;
        }
        return answer;
    }

}
然后,在camel.xml文件中,我以bean的形式公开了这个路由单

<bean id="integrationBean" class="com.wufoo.camel.WufooIntegrationRoutingSlip"/>

我使用这个bean将交换路由到正确的队列

<route errorHandlerRef="dlc" autoStartup="true" id="IntegrationQueue" xmlns:ns2="http://camel.apache.org/schema/web" xmlns="http://camel.apache.org/schema/spring">
    <description>Send all integrations here.  Logic will parse to individual queue based on Provider.</description>
    <from uri="activemq:integration"/> 
    <bean ref="integrationBean"/>
</route>

在此处发送所有集成。逻辑将根据提供程序解析到单个队列。

在此过程中,我学到了很多关于camel和spring的知识,所以感谢评论员们把我推向了正确的方向。

为什么不解析JSON字符串呢?您策略中的陷阱是,您建议使用正则表达式来完成基本上正确的解析任务,这已经得到了许多库的支持……现在您有了两个p问题…
{“Provider”:“Hello\“World\”}
{“notthe-\“Provider”:“}
{“a”:“仍然不是一个“Provider”:“只是一个字符串”}
-我应该继续吗?另一种选择是
JSON data=parseJSON(str);JSON Provider=data['Provider'];
(在一个想象的解析器上,但你明白了)。