2

我对正则表达式知之甚少,恐怕那里的无数教程对改善我的情况没有多大帮助。我想要的是获取一个字符串并用交替字符替换特定的分隔符,从而创建一个名称/值对。这是出于 SEO url 重写目的 - 使用 IIS Rewrite。

例如,如果我有以下 URL:

http://mydomain.com/mypage_foo_bar_megafoo_freebar_nofoo_closedbar.htm

我需要使用正则表达式将其重写为:

http://mydomain.com/mypage.cfm?foo=bar&megafoo=freebar&nofoo=closedbar

我已经尝试了一段时间但无处可去 - 任何人都可以帮助我吗?

谢谢

编辑:我意识到这不是一个好的 URL 结构的一个很好的例子——它是一个遗留系统,我不允许提供替代方案......唉。

4

1 回答 1

3

如果您只是替换下划线,您可能可以在没有正则表达式的情况下执行此操作。通过使用replaceFirst()您使用的任何语言的方法。使用正则表达式,您只会检测下划线并替换它们,与此相同。就像是;

myURL = myURL.replaceFirst("_",".cfm?");
while(myURL.contains("_"))
{
    myURL = myURL.replaceFirst("_","=");
    myURL = myURL.replaceFirst("_","&");
}

如果您需要一个更复杂的方法来防止在 URL 的其他部分检测到下划线,如果您概述了可能的组合是什么,我可能会帮助您找到一种合适的模式,以便在替换之前将域与参数分开。

根据下载页面,您是在.net 中执行此操作的吗? http://www.iis.net/downloads/microsoft/url-rewrite


好的,我已阅读此页面; http://www.iis.net/learn/extensions/url-rewrite-module/creating-rewrite-rules-for-the-url-rewrite-module 您将需要一个匹配字符串,例如;

^([a-zA-Z0-9\-]+)_([a-zA-Z0-9\-]+)_([a-zA-Z0-9\-]+).htm

还有一个替换字符串,例如

{R:1}.cfm?{R:2}={R:3}

然后,您需要重复此操作以增加变量对的数量,直到您认为合适,例如匹配字符串;

^([a-zA-Z0-9\-]+)_([a-zA-Z0-9\-]+)_([a-zA-Z0-9\-]+)_([a-zA-Z0-9\-]+)_([a-zA-Z0-9\-]+).htm

替换字符串;

{R:1}.cfm?{R:2}={R:3}&{R:2}={R:3}

该系统似乎是为已知的获取请求而设计的,而不是任何随机页面和获取请求的数量。该指南中没有提到如何应用重复模式。

于 2013-07-29T16:36:15.223 回答