2

我正在使用正则表达式来重写一些 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)

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

4

1 回答 1

1

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

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

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

/$1&$2

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

RewriteRule ^(.*?)&(?!amp;)(.*)$ /$1&$2 [L]
于 2013-04-23T07:53:36.593 回答