package com.zy.asrs.wms.utils; import com.alibaba.fastjson.JSON; import java.util.HashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.ArrayList; import java.util.List; public class WebkitParseUtils { private static final Pattern BOUNDARY_PATTERN = Pattern.compile("--WebKitFormBoundary([A-Za-z0-9+/]+)"); private static final Pattern NAME_PATTERN = Pattern.compile("Content-Disposition: form-data; name=\"([^\"]+)\""); private static final Pattern VALUE_PATTERN = Pattern.compile("Content-Disposition: form-data; name=\"[^\"]+\"\\s*\\n\\s*\\n\\s*([^\\n]+)"); // 解析WebKitFormBoundary字符串数据 public static String parseBoundary(String input) { Matcher matcher = BOUNDARY_PATTERN.matcher(input); if (matcher.find()) { return matcher.group(1); // 返回捕获的字符串 } return null; // 如果没有匹配,则返回null } // 解析所有name的值 public static List parseNames(String input) { List names = new ArrayList<>(); Matcher matcher = NAME_PATTERN.matcher(input); while (matcher.find()) { names.add(matcher.group(1)); // 添加捕获到的name值到列表 } return names; // 返回所有匹配到的name值 } // 解析所有值部分 public static List parseValues(String input) { List values = new ArrayList<>(); Matcher matcher = VALUE_PATTERN.matcher(input); while (matcher.find()) { String trim = matcher.group(1).trim(); Matcher matcher2 = BOUNDARY_PATTERN.matcher(trim); if(matcher2.find()) { trim = ""; } values.add(trim); // 添加捕获到的值到列表,并去掉前后的空白 } return values; // 返回所有匹配到的值 } public static HashMap getFormData(String input) { // // 解析WebKitFormBoundary字符串 // String boundary = parseBoundary(input); // System.out.println("解析出的WebKitFormBoundary字符串是: " + boundary); // 解析所有name的值 List nameValues = parseNames(input); // System.out.println("解析出的所有name值是: " + nameValues); // 解析所有值 List values = parseValues(input); // System.out.println("解析出的所有值是: " + values); HashMap map = new HashMap<>(); for (int i = 0; i < nameValues.size(); i++) { String key = nameValues.get(i); // 确保即使值为空也能正常存入map String value = i < values.size() ? values.get(i) : ""; map.put(key, value); } // System.out.println(JSON.toJSONString(map)); return map; } public static void main(String[] args) { String input = "------WebKitFormBoundarySOfEJLg0rR0hf3mm\n" + "Content-Disposition: form-data; name=\"locNo\"\n" + "\n" + "1\n" + "------WebKitFormBoundarySOfEJLg0rR0hf3mm\n" + "Content-Disposition: form-data; name=\"test\"\n" + "\n" + "123\n" + "------WebKitFormBoundarySOfEJLg0rR0hf3mm\n" + "Content-Disposition: form-data; name=\"quer\"\n" + "\n" + "111\n" + "------WebKitFormBoundarySOfEJLg0rR0hf3mm--"; getFormData(input); } }