Regex 正则表达式匹配替换帮助

Regex 正则表达式匹配替换帮助,regex,.htaccess,mod-rewrite,Regex,.htaccess,Mod Rewrite,我正在尝试对一个.htaccess文件进行正则表达式匹配和替换,但我不能完全理解替换位。我想我的比赛部分是对的,但也许有人能帮我 我有这个网址- 我想把它变成这样- (山地社区/生活方式)/\d/(.*)(.aspx) 然后我想我会有一个这样开始的重写规则- 山地生活方式/$2$3 但在这个例子中,我需要取$2中的值,并重写它,在大写字母的单词之间加上破折号。现在我被难住了。我认为你不可能用regex来处理大写字母 您最好在URL中保留破折号并删除.aspx 例如: 这需要以下规则: ^/M

我正在尝试对一个.htaccess文件进行正则表达式匹配和替换,但我不能完全理解替换位。我想我的比赛部分是对的,但也许有人能帮我

我有这个网址-

我想把它变成这样-

(山地社区/生活方式)/\d/(.*)(.aspx)

然后我想我会有一个这样开始的重写规则-

山地生活方式/$2$3


但在这个例子中,我需要取$2中的值,并重写它,在大写字母的单词之间加上破折号。现在我被难住了。

我认为你不可能用regex来处理大写字母

您最好在URL中保留破折号并删除.aspx

例如:

这需要以下规则:

^/MountainCommunities/Lifestyles/5/([^/]+)/\?([^/]+)   /mountain-lifestyle/$1.aspx?$2 [I]
这还考虑了发送到页面的任何查询字符串


顺便说一句:你是如何在IIS中使用.htaccess的?

我想你必须在两位代码中完成这项工作。。。取出$2,在每个大写字母(除第一个大写字母外)前面加上一个-,然后使用在末尾加上.aspx的结果。

试试以下方法:

RewriteRule ^(([A-Z][a-z]+-)*)([A-Z][a-z]+)(([A-Z][a-z]+)+)(\.aspx)?$ /$1$3-$4 [N]
RewriteRule ^([A-Z][a-z]+-)+[A-Z][a-z]+$ /$0.aspx [R=301]

注意mod_rewrite使用内部计数器来检测和避免无限循环。因此,您的URL可能不包含太多需要转换的单词(请参阅Apache<2.1和Apache的)≥ 2.1)。

您可以在中间的“VacationHome”中使用正则表达式“([A-Z]),替换为regex“-$1”-这将给您“-VacationHome Rentals”-然后您只需切掉第一个字符,将URL的第一部分粘贴在前面,最后是.aspx。

我想我不太明白你想做什么。为什么您不能简单地搜索:

http://www.foo.com/MountainCommunities/Lifestyles/5/VacationHomeRentals.aspx

并将其替换为:

http://www.foo.com/mountain-lifestyle/Vacation-Home-Rentals.aspx


或者这是您试图转换的模式的一个具体示例?

我认为主正则表达式是由其他人编写的,但为了将请求名称与放置破折号相匹配(假设所有文件名都有三个名称的驼峰式表示形式,即“VacationHomeRentals.aspx”):

RewriteRule: ^/MountainCommunities/Lifestyles/\d+/([A-Z][a-z]+)([A-Z][a-z]+)([A-Z][a-z]+)\.aspx$ /mountain-lifestyle/$1-$2-$3.aspx

这是@Gumbo响应的受限版本,因为我没有机会测试他的递归。递归技术绝对是最好的,在任何情况下都是最有用的。

查询字符串不是URL路径的一部分,因此无法在RewriteRule指令中进行检查。@Gumbo:当然可以。我目前正在使用ISAPI\U rewrite to做这样的事。