我对Regex的理解很少,我担心那里的无数教程对改善我的情况没有太大帮助。 我想要的是取一个字符串并用交替的字符替换特定的分隔符,从而创建一个名称/值对。 这是用于SEO URL重写目的 - 使用IIS Rewrite。
例如,如果我有以下网址:
http://mydomain.com/mypage_foo_bar_megafoo_freebar_nofoo_closedbar.htm
我需要使用正则表达式将其重写为:
http://mydomain.com/mypage.cfm?foo=bar&megafoo=freebar&nofoo=closedbar
我已经尝试了一段时间并且无处可去 - 有人可以帮助我吗?
由于
编辑:我意识到这不是一个很好的URL结构的好例子 - 它是一个遗留系统,我不允许提供替代方案......唉。答案 0 :(得分: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}
系统似乎是为已知的get请求而设计的,而不是任何随机页面和get请求数。没有提及如何在该指南中应用重复模式。