我正在测试我继承的旧项目中存在的以下正则表达式:
.*\\.do
在Java中,正则表达式声明为:
private static final String[] ACCESS_REGEX = {".*\\.do", ""};
基本上使用Pattern.matches方法的包装器进行检查:value.matches(check)
。
这个旧的正则表达式适用于各种传入请求,例如home.do
,我正在各种正则表达式测试站点(下面列出)进行测试:
但是,我无法让正则表达式匹配我认为应该匹配的各种字符串...我认为上面的正则表达式匹配以.do
结尾并且前面有一些字符的字符串。但是,当我测试这些时,没有找到匹配。
home.do
\home.do
mmm\mmm\home.do
\mmm\home.do
home.do
答案 0 :(得分:1)
提醒Java字符串文字中正则表达式和中\
字符的特殊含义!
正则表达式应为
.*\.do
这在this discusson上非常有效。
在Java字符串文字中,您还需要转义\
字符,因此Java中的正则表达式必须
.*\\.do
答案 1 :(得分:1)
问题在于,您使用的在线正则表达式工具需要普通正则表达式(没有特殊字符转义),在您的特定情况下为.*\.do
- 请注意单个反斜杠。
另一方面,当在Java中的字符串文字中定义时,正则表达式需要转义特殊字符,因此在Java代码中需要".*\\.do"
。
在在线测试工具中使用未转义的正则表达式。
答案 2 :(得分:0)
你需要单一的反斜杠而不是在regexp中加倍反斜杠。 你只想逃避点。删除第一个反斜杠,测试将通过