使用相同的正则表达式获取文件名的 1 或 2 部分

问题描述 投票:0回答:1

有人可以帮助我吗? 它用于 .htaccess 中的 mod 重写

从此网址文件名:

汽车奥迪-tt-2

我需要获取完整的字符串。


但是如果我得到的字符串是这样的:

汽车奥迪-tt-2-2019

我需要(使用相同的正则表达式)1 美元中的“car-audi-tt-2”和 2 美元中的“2019”。


有什么想法吗?

现在我有了这段代码,它仅适用于 https://www.regextester.com:

中的第二种情况
([-A-Za-z0-9\+\.]+)-(20[-0-9]{2})*
regex .htaccess mod-rewrite
1个回答
0
投票
([-A-Za-z0-9\+\.]+)-(20[-0-9]{2})*

您还需要将

-
(连字符)分隔符(在最后一个“年份”之前)设为可选。但仅当“年份”存在且不将其包含在捕获子模式中时才可选。

您还应该锚定正则表达式(尽管这可能取决于您的

RewriteRule
指令),因为您需要使第一个子模式上的
+
量词非贪婪,以便不消耗现在的 可选“-year” .

[-0-9]
- 正如我在评论中查询的那样,第二个字符类中的第一个连字符看起来不合适并且与您的示例不匹配。我在下面的解决方案中删除了它,并简化了正则表达式。

无需对字符类中的文字

+
.
字符进行反斜杠转义。

尝试以下方法:

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

括号内的子模式上的

?:
前缀使其无法捕获。这样嵌套的捕获子模式就成为第二个捕获组(即
$2
)。


旁白:

我需要获取(使用相同的正则表达式)

如果使用 mod_rewrite 那么你不一定需要在单个规则/正则表达式中执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.