Loving Coding & Visual Design

RewriteRule里正则表达式减号字符的顺序问题

在用URLRewrite的时候,PHP正则匹配(preg_match)的时候,常常有一个容易忽略的小问题:
有效:RewriteRule ([0-9a-zA-Z+_.-]{3,})/$ /article-$1.html [L]
无效:RewriteRule ([0-9a-zA-Z-+_.]{3,})/$ /article-$1.html [L]

仅仅是因为方括号内减号(-)字符顺序的不同,让正则匹配失效。
但这又不是普遍的问题,只是在个别虚拟主机上出现。

下面的解释可以帮我们释疑:
正则表达式通过使用元字符来编码在模式中,元字符不代表其自身,它们用一些特殊的方式来解析。
减号(-)字符可以在字符类中指定一个字符范围。例如,[d-m] 匹配了 d 和 m 之间的任何字符,包括两者。如果字符类中需要减号本身,则必须用反斜线转义或者放到一个不能被解释为指定范围的位置,典型的位置是字符类中的第一个或最后一个字符。



下一页


最 近 文 章

  1. 网页在GreenBrowser下的兼容问题 - Wed, 26 May 2010 15:16:48 +0000
  2. FireFox4将带给我们什么? - Thu, 13 May 2010 05:16:05 +0000
  3. 设置Apache禁止通过IP访问服务器 - Wed, 12 May 2010 04:55:18 +0000
  4. Godaddy的.COM和.NET域名即将涨价 - Wed, 05 May 2010 04:04:55 +0000
  5. 六年了,总结一个英文网站的SEO之路 - Sun, 02 May 2010 11:27:16 +0000
  6. Discuz7的图片附件不能显示的问题 - Wed, 28 Apr 2010 15:51:31 +0000
  7. Red Hat Enterprise AS 4安装DirectAdmin - Wed, 14 Apr 2010 04:00:47 +0000
  8. Are you ready for WebGL? - Wed, 24 Feb 2010 06:04:03 +0000
  9. WebGL三维示例和Js版Box2D物理引擎 - Sun, 21 Feb 2010 03:58:44 +0000
  10. FLash与HTML5 - Fri, 05 Feb 2010 08:28:02 +0000