如何使用spring设置正则表达式字符串而不进行转义?

时间:2010-08-11 14:45:33

标签: java regex spring

我正在使用spring来设置我的正则表达式

弹簧:

<property name="regularExpressionAsString" value="(?&lt;!\\.TMP)\\Z" />

代码:

public void setRegularExpressionAsString(String regularEx) {
    this.regularExpression = Pattern.compile(regularEx);
}

这不能正常工作,当我调试我的setter时,我看到spring逃脱了\ to \\有没有办法解决这个问题?

3 个答案:

答案 0 :(得分:8)

虽然没有回答您的原始问题:您是否考虑过直接将setter参数更改为java.util.regex.Pattern? Spring有一个PropertyEditor,所以你可以直接注入你的模式:

应用上下文:

<property name="regularExpression" value="(?&lt;!\.TMP)\Z" />

豆:

public void setRegularExpression(Pattern regularExpression) {
    this.regularExpression = regularExpression;
}

答案 1 :(得分:2)

  

我看到春天逃离\\\有没有办法解决这个问题?

实际上,我觉得是这些额外反斜杠的来源。

<property name="regularExpressionAsString" value="(?&lt;!\\.TMP)\\Z" />

除非我误解你的意图,否则这些双反斜杠字符中的每一个都应该代表一个正则表达式转义字符。所以\\.应该是一个文字的句号,而\\Z应该是一些字符类。

问题是你正在逃避正则表达式,好像它们在Java源代码中表示为Java字符串文字一样。但这是XML,所以你根本不需要转义反斜杠。

尝试将上述内容更改为以下内容:

<property name="regularExpressionAsString" value="(?&lt;!\.TMP)\Z" />

答案 2 :(得分:0)

您是否考虑过在属性文件中设置Regex字符串?这样,您就可以在没有完全重新编译应用程序的情况下更改正则表达式(如果需要)。

您仍然可以使用PropertyPlaceholderConfigurer在Spring XML配置中进行设置。