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

求适配两种文件名的正则表达式(用于.htaccess的mod-rewrite)

解决方案

正则表达式

使用以下正则可同时兼容两种场景:

^([-A-Za-z0-9\+\.]+)(?:-(20\d{2}))?$

正则说明

  • ^ 和 $:锚定整个字符串,避免出现部分匹配的情况
  • ([-A-Za-z0-9\+\.]+):捕获组$1,匹配文件名的主体部分,包含你指定的所有允许字符
  • (?:-(20\d{2}))?:
    • ?: 标记非捕获组,仅用于包裹规则,不会生成额外捕获变量
    • -(20\d{2}):匹配连接年份的横杠,以及20开头的四位数年份(如2019、2024),年份部分会被捕获到$2
    • ?:让整个年份后缀部分变为可选,不带年份的文件名也能正常匹配

.htaccess 规则示例

将正则写入RewriteRule,示例如下:

RewriteEngine On
RewriteRule ^([-A-Za-z0-9\+\.]+)(?:-(20\d{2}))?$ target-script.php?item=$1&year=$2 [L]

测试效果

  • 文件名car-audi-tt-2:$1 = car-audi-tt-2,$2为空
  • 文件名car-audi-tt-2-2019:$1 = car-audi-tt-2,$2 = 2019

原正则的问题分析

你之前的正则([-A-Za-z0-9\+\.]+)-(20[-0-9]{2})*存在两处问题:

  1. 强制要求字符串末尾带一个横杠(即使无年份),导致不带年份的文件名无法匹配
  2. *允许出现多个年份后缀(如car-audi-tt-2-2019-2020),不符合常规需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:47:40