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