分类分类
关注+2011-01-07作者:清晨
单个字符转义序列
下面的转义序列是单个字符的别名:
转义序列 | 字符代码 | 含义 |
\a | 0x07 | 信号铃记号. |
\t | 0x09 | 制表符 |
\v | 0x0B | 垂直制表符 |
\e | 0x1B | ASCII转义字符 |
\0dd | 0dd | 八进制字符代码,其中dd是一个或多个八进制数字。 |
\xXX | 0xXX | 十六进制字符代码,其中XX是一个或多个八进制数字。 |
\x{XX} | 0xXX | 十六进制字符代码,其中XX是一个或更多十六进制数字,可选用Unicode字符。 |
\cZ | z-@ | ASCII转义序列control-Z,其中Z是任意一个编码大于或等于“@”的编码的ASCII字符。 |
杂项转义序列
以下提供perl的大部分兼容性,但是在\l、\L、\u和\U上有一些区别
转义序列 | 含义 |
\w | 等价于 [[:word:]]. |
\W | 等价于[^[:word:]]. |
\s | 等价于[[:space:]]。 |
\S | 等价于[^[:space:]]。 |
\d | 等价于[[:digit:]]。 |
\D | 等价于[^[:digit:]]。 |
\l | 等价于[[:lower:]]。 |
\L | 等价于[^[:lower:]]。 |
\u | 等价于[[:upper:]]。 |
\U | 等价于[^[:upper:]]。 |
\C | 任何单个字符,等价于“.” |
\X | 匹配任何Unicode组合字符序列,例如“a\x0301”(字符a和一个尖角) |
\Q | 开始引号运算符。后面跟前的所有的内容都被当作字面值,直到发现一个\E结束运算符。 |
\E | 结束引用运算符,终止一个由\Q开头的引用序列。 |
怎样得到匹配
正则表达式将匹配第一个可匹配字符串。如果从给定的起始处可以匹配到不止一个字符串,则它会匹配那个能匹配得最长的字符串。如果从同一个起始处有多个合适的匹配,而且每个匹配的长度都一样,则将选择那个第一子表达式匹配得最长的匹配。如果有两个以上的匹配字符串它们的第一子表达式匹配得一样长,则比较第二子表达式匹配的长度,如此类推。注意:ISAPI_Rewrite使用比封演算法。只有表达式匹配了整个顺序串才能得到匹配结果。例如:
• RewriteCond URL ^/somedir/.* #将匹配任何导向somedir目录以及它的子目录的请求,与此同时,
• RewriteCond URL ^/somedir/ #只匹配somedir根目录的请求。
对“病态”正则表达式的特别提示:
ISAPI_Rewrite 使用了一个非常强大的来自Boost库的正则表达式引擎。但是它依然有一些局限性:有着一些“病态”的表达式,它可能会指数级地消耗匹配时间。这些都涉及到嵌套重复运算符,例如试图对N个连续字母a匹配表达式“(a*a)*b”,消耗的时间将与N2成正比。这些表达式常常能改成另一种写法来避免这种问题。例如,“(a*a)*b”可以被改写成“a*b”,解析它消耗的时间与N成正比。在多数情况下,非嵌套重复表达式消耗的时间与N2成正比,但是,如果条款是相互排斥的,则它们会在线性时间里完成匹配。在“a*b”这种情况下,每个字符将要么匹配a要么匹配b或者不匹配。相较之下,“a*a”匹配器不能告知哪个分支被采取(第一个 a还是第二个a)因此必须尝试两种。
Regex可以检测出这种“病态”的正则表达式并终止和它们的匹配。这将使ISAPI_Rewrite的规则失效。当一个规则失效时,ISAPI_Rewrite将给客户端发送一个"Internal Server error - Rule Failed"的状态,以表示配置错误。
4.1AccessFileName指令
说明 | 设置分布式配置文件的名称 |
语法 | AccessFileName filename [filename] ... |
默认值 | AccessFileName .htaccess |
使用环境 | server config |
指定一个ISAPI_ReWrite寻求分布式配置的文件名列表。默认文件名是.htaccess。ISAPI_ReWrite只能载入它能在这个列表中找到的第一个文件。默认情况下ISAPI_ReWrite管理者会以hidden属性标记配置文件-它将防止文件被远程用户直接访问到。
如果配置文件进行了任何修改,它将在下次请求服务器时自动加载。
4.2AllowOverride指令
说明 | 明确规定了每个目录重写的基准URL。 |
语法 | AllowOverride All|None|directive-type [directive-type] ... |
默认值 | AllowOverride All |
使用环境 | server config, virtual host, directory |
这个指令声明了在分布式.htaccess文件里的指令是否可以覆盖父级别的httpd.conf中的指令。在ISAPI_Rewrite的使用环境中,这个指令实际上控制了特定虚拟主机或者目录的.htaccess文件的可用或者不可用。目前只支持三个值:All、None和FileInfo。
All和FileInfo使.htaccess文件以及它里面的整个ISAPI_Rewrite目录可用,None使所有的.htaccess文件以及目录不可用。这些目录具有继承性。这意味着如果你为一些目录或者虚拟主机指定AllowOverride none,.htaccess文件将对整个子目录树不可用。
本文导航
相关文章
更多+相同厂商
热门推荐
点击查看更多
点击查看更多
点击查看更多
说两句网友评论