正则表达式匹配器可在JUnit上运行,但无法在Servlet容器上运行

时间:2018-11-25 00:25:16

标签: java regex

这是我的测试字符串

-----------------------------12303134546862
Content-Disposition: form-data; name="file"; filename="notepad.html"
Content-Type: text/html

我有一个Java正则表达式代码来获取“边界”部分,即-----------------------------12303134546862

String BOUNDARY_PATTERN = "(\\A-+(.)+\\n)";
String byteString = new String(bytes, "UTF-8");
Pattern pattern = Pattern.compile(BOUNDARY_PATTERN);
Matcher matcher = pattern.matcher(byteString);
while (matcher.find()) {
    String boundary = matcher.group(1);
    contentType = "multipart/form-data; boundary=" + boundary;
}

使用JUnit测试运行时,匹配器匹配组1,但是在Tomcat服务器/ servlet内部运行时,boundary为null,因此匹配器不起作用。

可能是什么原因引起的?

1 个答案:

答案 0 :(得分:0)

问题可能是因为您不是刚开始输入\A所匹配的内容。

尝试使用多行标志和正常的起始锚点:

"(?m)^-+\\d+$"

启用多行标志后,^$匹配每条的开始和结束,而不是整个输入的开始和结束。