【发布时间】:2009-07-15 21:34:41
【问题描述】:
我正在开发一个 ASP.NET 响应过滤器,它会在特定情况下重写 URL 以指向不同的域。
因为 ASP.NET 对写入的响应进行了分块,所以在页面完全流式传输之前,我的过滤器会被调用多次。这意味着我需要小心,每次调用 Regex.Replace 时都不会重复替换 url(你最终会得到 http://foo.comhttp://foo.com/path)。
为此,我尝试对替换使用否定的lookbehind 表达式,但它似乎不起作用:
content = Regex.Replace(content,"((?<!" + newDomain + ")" + match + ")", newDomain + match);
这会创建一个像这样的正则表达式:
((?<!http://www.foo.com/)actual/url)
但是,它似乎不尊重背后的外观,我将所有东西都替换了。
有什么想法吗?
编辑:当我使用 Regex Coach 之类的工具针对示例数据对其进行测试时,此 regex 效果很好。
编辑 2:添加了斜线,它实际上是存在的。
【问题讨论】:
-
“匹配”变量究竟从何而来?更准确地说,您是通过从内容中解析 URL 来获取它们的吗?该行之前的“匹配”是什么样的?
-
您要替换域还是路径?正如您所说,您在 Regex Coach 中获得了预期的匹配,但没有获得预期的替换操作。
-
哇,我所有的答案都是-1,没有任何反馈。
标签: .net regex lookbehind