You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则匹配HTTP头指定字段后的行尾日期时间?

解决HTTP头Date/Last-Modified字段的日期提取问题

首先来说说你原来的正则为什么没生效:

  • 你用BufferedReader.readLine()读取的每一行,是不包含末尾换行符的,所以正则里的(?=\n)这个正向断言根本匹配不到内容,这是核心问题。
  • 另外这个正则只能匹配Date字段,没法复用在Last-Modified上,有点浪费。

给你两个实用的解决方案,按需选择:

方案一:通用正则(同时兼容两个字段)

这个正则可以同时匹配Date和Last-Modified行,并且鲁棒性更强:

^(Date|Last-Modified):\s*(.*)$

正则解释:

  • ^:匹配行的开头,确保我们只匹配整行的字段(避免行内意外出现字段名的情况)
  • (Date|Last-Modified):匹配两个目标字段中的任意一个
  • :\s*:匹配冒号,以及后面的任意数量空格(HTTP头允许冒号后有多个空格,用\s*比\s更灵活)
  • (.*):捕获冒号空格之后的所有内容,也就是我们需要的日期字符串
  • $:匹配行尾,确保不会捕获到多余的内容

Java代码示例

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class HttpHeaderDateExtractor {
    public static void main(String[] args) {
        String dateLine = "Date: Mon, 27 Jul 2009 12:28:53 GMT";
        String lastModifiedLine = "Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT";
        
        // 编译正则,加上CASE_INSENSITIVE可以兼容大小写不同的字段名(比如date:、LAST-MODIFIED:)
        Pattern pattern = Pattern.compile("^(Date|Last-Modified):\\s*(.*)$", Pattern.CASE_INSENSITIVE);
        
        // 提取Date字段值
        Matcher matcher = pattern.matcher(dateLine);
        if (matcher.matches()) {
            String extractedDate = matcher.group(2);
            System.out.println("提取的Date: " + extractedDate);
        }
        
        // 提取Last-Modified字段值
        matcher = pattern.matcher(lastModifiedLine);
        if (matcher.matches()) {
            String extractedLastModified = matcher.group(2);
            System.out.println("提取的Last-Modified: " + extractedLastModified);
        }
    }
}

方案二:单个字段的简化正则

如果你只想单独处理某个字段,可以去掉换行符断言,比如针对Date的正则:

(?<=Date:\s).*

或者针对Last-Modified:

(?<=Last-Modified:\s).*

这个方案更简单,但需要为每个字段单独写正则,灵活性不如方案一。

额外注意事项

  • HTTP头的字段名是大小写不敏感的,如果你的场景中可能出现小写或混合大小写的字段名(比如date:、last-modified:),记得给正则加上Pattern.CASE_INSENSITIVE标志。
  • 有些服务器返回的头可能在冒号后有多个空格,用\s*代替\s可以完美适配这种情况。

内容的提问来源于stack exchange,提问作者Fishingfon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:51:24