2

我正在整理一些正则表达式来处理将传入链接从旧站点重定向到新站点上的等效页面。我希望我可以在正则表达式中处理以下情况,所以我不必在后端进行:

传入链接:/reservations/inn_details.asp?num=717

重定向链接:/reservations/property-detail.aspx?pid=00717

可以看到,原来的查询字符串值 717 需要在重定向链接中为 00717。规则是这些 ID 在重定向的 URL 中都需要有五个字符长。

所以我的问题是:是否可以在正则表达式中计算出查询字符串值有多少个字符,然后添加足够多的前导 0 以等于五个字符?

我可以做四个单独的正则表达式来覆盖值是 1、2、3 或 4 位长的情况,但是一举处理这一切会更酷!

谢谢,B。

4

5 回答 5

6

不幸的是,这不是你可以单独使用正则表达式处理的事情。在我看来,最简单的解决方法是更改​​ property-detail.aspx 以进行零填充。

我的意思是,只需将正则表达式重定向到“/reservations/property-detail.aspx?pid=717”,并让 aspx 文件在 pid 前面添加必要的零,然后再开始获取数据。无论如何都必须有一些代码来清理该输入(或者至少我希望如此),因此可以轻松地将其添加到该部分中。

于 2009-04-15T16:14:29.420 回答
2

如果你想使用 mod_rewrite,有一种方法可以做到:

RewriteCond %{QUERY_STRING} ^(([^&]*&)*)num=(\d+)(.*)
RewriteCond 0000%3 ^0+(\d{5})$
RewriteRule ^/reservations/inn_details\.asp$ /reservations/property-detail.aspx?pid=%1 [L,R=301]
于 2009-04-15T16:35:05.017 回答
0

不知道在某些随机正则表达式实现中可能是什么,但至少对于真正的正则表达式,不。

于 2009-04-15T16:16:13.627 回答
0

您还没有解释您调用正则表达式的通用语言。然而,大多数语言都提供了使用正则表达式来匹配和替换文本的工具。匹配字符串的数字部分,然后使用您的语言的特性用前导零填充数字。

于 2009-04-15T16:18:10.863 回答
0

[?&]num=(\d+)将为您获得价值。但是正则表达式不实现逻辑,只实现模式识别。您的语言或工具集需要提供一种分析和处理它的方法。

例如在 perl 中,你可以:

s/([?&])num=(\d+)/sprintf( "%spid=%5.5d", $1, $2 )/e;

但这当然只是解决了您的转换问题之一。

于 2009-04-15T16:40:04.053 回答