【问题标题】:Regular Expression Replace all Capture Occurrences正则表达式替换所有捕获出现
【发布时间】:2013-04-23 07:31:59
【问题描述】:

我正在使用正则表达式来重写一些 URL。我需要用 & 替换 URL 中的所有 & 符号但不是当 & 号已经开始一个 &发生。所以我最终得到了这个:

search: (^[^&]*?)&((?!amp;)[^W]*?.htm)
replace: $1&$2

转化的:

    Bob_&_Carol.htm  

进入:

    Bob_&_Carol.htm

但这仅适用于第一个&符号,并且在多个&符号上失败,仅转换第一次出现。

    Bob_&_Carol_&_Alice.htm 

进入:

    Bob_&_Carol_&_Alice.htm

所以我修改了匹配表达式以找到多个&符号:

    ^(?:([^&]*?)&(?!amp;))*([^W]*?.htm)

但我不知道如何编写替换字符串来处理多个捕获。如何编写替换字符串来替换所有捕获?

【问题讨论】:

  • 您使用哪种工具/语言进行搜索/替换?
  • IIS URL 重写模块将使用最终的正则表达式。我一直在使用名为 Rad Regex Designer 的免费工具进行测试。
  • 而不是一个单一的正则表达式,它可以捕获多个带有 & 符号的组和每个组中的一些文本,您需要一个能够捕获一个 & 符号,但多次替换它的正则表达式。您应该使用带有参数指定的替换函数来替换所有出现的事件,或者使用 ReplaceAll 函数或类似的东西,这取决于您的语言(您使用什么语言)?
  • TY 我将尝试重新设计表达式。很抱歉,我无法更好地回答“哪种语言”的问题。我只是将搜索和替换表达式提供给 Microsoft IIS URL 重写模块。除了接受这两个表达式之外,它别无选择。通常我使用 C# 和 .NET 对象,这些表达式似乎遵循这些规则。

标签: regex iis url-rewriting


【解决方案1】:

您需要将以下正则表达式与捕获组匹配

^(.*?)&(?!amp;)(.*)$

并使用以下字符串进行替换:

/$1&$2

整体重写规则可能如下所示:

RewriteRule ^(.*?)&(?!amp;)(.*)$ /$1&$2 [L]

【讨论】:

  • 您的时间。这种组合仍然只是替换第一次出现的 & 符号。
  • 是的,它会替换一个匹配项,但 Web 服务器会应用 RewritRule 匹配的次数。我没有 IIS,但已经在 Apache 中对 RewriteRule 进行了测试,它通过替换所有出现的 & 来工作。
  • 他似乎在尝试类似的东西,但也无法让它与 IIS 一起工作。 TY 为您提供帮助。 stackoverflow.com/questions/1058789/…
  • 您是否在 IIS 上对此进行了测试?我没有安装 IIS(请告诉我是否可以在我拥有的 XP 笔记本电脑上安装一些免费版本的 IIS)
  • 是的,我一直在测试环境和 IIS 上实时尝试所有解决方案。我解决了链接上的丑陋解决方案。我检查了所有 URL 并且没有超过 4 个 & 符号,所以我为每种情况设置了 4 个不同的规则。丑陋但有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 2021-07-25
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
相关资源
最近更新 更多