PC6下载站

分类分类

ISAPI_Rewrite3使用教程

关注+2011-01-07作者:清晨

6 页 正则表达式

正则表达式

集合元素
集合元素一般采用预置声明内加[.tagname.]的格式。其中tagname既可以是一个单个字符,也可以是一个集合元素名。例如:[[.a.]]等价于[a],[[.comma.]]等价于[,]。ISAPI_Rewrite支持所有的标准POSIX集合元素名,以及下面的这些字符组合:“ae”、“ch”、“ll”、“ss”、“nj”、“dz”、“lj”、任意小写、大写、首字母大写的变化组合。多个字符集合元素可以导致预置匹配一个以上的字符。例如:[[.ae.]]将匹配两个字符,但是[^[.ae.]]只会匹配一个字符。
等价类
等价类一般采用预置声明内加[=tagname=]的格式,其中tagname既可以是单个字符,也可以是一个集合元素的名称,它能匹配同样的主要等价类成员的字符,就跟集合元素[.tagname.]一样。一个等级类是一个相同整理的字符预设,但主要是一个等价类的字符集,其主要排序关键字都是一样的(例如,字符串通常先依字符整理,然后根据重音,然后根据大小写。主要排序键与字符相关,次要与重音相关,再次与大小写相关。如果没有等价类符合tagname,则[=tagname=]是与[.tagname.]完全一样的。
Equivalence classes take the general form [=tagname=] inside a set declaration, where tagname is either a single character, or a name of a collating element, and matches any character that is a member of the same primary equivalence class as the collating element [.tagname.]. An equivalence class is a set of characters that collate the same, a primary equivalence class is a set of characters whose primary sort key are all the same (for example strings are typically collated by character, then by accent, and then by case; the primary sort key then relates to the character, the secondary to the accentation, and the tertiary to the case). If there is no equivalence class corresponding to tagname, then [=tagname=] is exactly the same as [.tagname.].
要在一个预设中包含字面值“-”,请这样做:使它成为开放的“[”或者“[^”后面的第一个字符、一个系列或者一个集合元素的末点,或者用一个前置的转义字符如“[\-]”。要在一个预设中包含一个字面值“[”或者“]”或者“^”,请把它们作为一个系列或者一个集合元素的末点,或者用一个前置的转义字符。
行锚
锚用来匹配一行开头或结尾的空串。“^”匹配行开头的空串,“$”匹配行结尾的空串。
回溯引用
回溯引用是引用前面已经被匹配的子表达式。这个引用是被匹配的子表达式,而不是表达式本身。回溯引用包括转义字符“\”跟着一个从1到9的数字。“\1”引用第一个子表达式,“\2”引用第二个,依次类推。举个例子,表达式“(.*)\1”匹配任何关于它的中点重复的字符串,比如说“abcabc”或者“xyzxyz”。一个对子表达式的回溯引用不参加任何匹配,匹配空字符串。在ISAPI_Rewrite中,所有的回溯引用是对整个RewriteRule和相应的RewriteCond指令是全局性相关的。RewriteRule指令中如果有RewirteCond子令的话,子匹配从相应的RewriteRule指令的第一个RewriteCond指令开始从上到下从左往右编号。
向前查找
向前查找有两种形式:正向前查找和负向前查找。
• "(?=abc)"匹配跟在表达式"abc"后面的零字符。
• "(?!abc)"匹配不跟在表达式"abc"后面的零字符。
通配符
下面的运算符提供了与GNU正则表达式库的兼容性。
• "\w"匹配任意单个组词字符,它等价于表达式“[[:word:]]”。
• "\W"匹配任意一个非组词字符,它等价于表达式“[^[:word:]]”。
• "\<"匹配词头空字符串。
• "\>"匹配词尾空字符串。
• "\b"匹配词头或者词尾空字符串。
• "\B"匹配词语中的空字符串。
转义字符
转义字符“\”含有多重意义:
• 转义字符可以引导一个运算符,例如:回溯引用、词操作符
• 转义字符可以使下面的字符正常,比如说“\*”代表一个字面值“*”,而不是重复运算符。

单个字符转义序列
下面的转义序列是单个字符的别名:

 

 

转义序列 字符代码 含义
\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文件的可用或者不可用。目前只支持三个值:AllNoneFileInfo
AllFileInfo使.htaccess文件以及它里面的整个ISAPI_Rewrite目录可用,None使所有的.htaccess文件以及目录不可用。这些目录具有继承性。这意味着如果你为一些目录或者虚拟主机指定AllowOverride none,.htaccess文件将对整个子目录树不可用。

展开全部

相关文章

更多+相同厂商

热门推荐

  • 最新排行
  • 最热排行
  • 评分最高
排行榜

    点击查看更多

      点击查看更多

        点击查看更多

        说两句网友评论

          我要评论...
          取消