用于检测struts` .do`页面的正则表达式 - 测试失败

时间:2017-03-21 15:12:01

标签: java regex

我正在测试我继承的旧项目中存在的以下正则表达式: .*\\.do

在Java中,正则表达式声明为:

private static final String[] ACCESS_REGEX = {".*\\.do", ""};

基本上使用Pattern.matches方法的包装器进行检查:value.matches(check)

这个旧的正则表达式适用于各种传入请求,例如home.do,我正在各种正则表达式测试站点(下面列出)进行测试:

但是,我无法让正则表达式匹配我认为应该匹配的各种字符串...我认为上面的正则表达式匹配以.do结尾并且前面有一些字符的字符串。但是,当我测试这些时,没有找到匹配。

enter image description here

示例测试字符串:

home.do
\home.do
mmm\mmm\home.do
\mmm\home.do
 home.do

3 个答案:

答案 0 :(得分:1)

提醒Java字符串文字中正则表达式\字符的特殊含义!

正则表达式应为

.*\.do

这在this discusson上非常有效。

在Java字符串文字中,您还需要转义\字符,因此Java中的正则表达式必须

.*\\.do

答案 1 :(得分:1)

问题在于,您使用的在线正则表达式工具需要普通正则表达式(没有特殊字符转义),在您的特定情况下为.*\.do - 请注意单个反斜杠。

另一方面,当在Java中的字符串文字中定义时,正则表达式需要转义特殊字符,因此在Java代码中需要".*\\.do"

在在线测试工具中使用未转义的正则表达式。

答案 2 :(得分:0)

你需要单一的反斜杠而不是在regexp中加倍反斜杠。 你只想逃避点。删除第一个反斜杠,测试将通过