DDR爱好者之家 Design By 杰米

正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。

相同优先级的从左到右进行运算,不同优先级的运算先高后低。下表从最高到最低说明了各种正则表达式运算符的优先级顺序:

运算符 描述 转义符 (), ("或"操作
字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。

今天的表是对整体的正则表达式语法中的元字符的分类汇总。帮助记忆各元字符。同上一样,该文档转载至MSDN。

运算符

下表从最高到最低说明了各种正则表达式运算符的优先级顺序:

运算符

说明

\

转义符

(), ("2" cellpadding="5" width="50%" frame="lhs">

特殊字符

注释

$

匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,那么 $ 还匹配 \n 或 \r 前面的位置。若要匹配 $ 字符本身,请使用 \$。

( )

标记子表达式的开始和结束。可以捕获子表达式以供以后使用。若要匹配这两个字符,请使用 \( 和 \)。

*

零次或多次匹配前面的字符或子表达式。若要匹配 * 字符,请使用 \*。

+

一次或多次匹配前面的字符或子表达式。若要匹配 + 字符,请使用 \+。

.

匹配除换行符 \n 之外的任何单个字符。若要匹配 .,请使用 \。

[ ]

标记中括号表达式的开始。若要匹配这些字符,请使用 \[ 和 \]。

"2" cellpadding="5" width="50%" frame="lhs">

字符

说明

*

零次或多次匹配前面的字符或子表达式。例如,zo* 匹配 z 和 zoo。* 等效于 {0,}。

+

一次或多次匹配前面的字符或子表达式。例如,zo+ 匹配 zo 和 zoo,但不匹配 z。+ 等效于 {1,}。

"jbborder">

/Chapter [1-9][0-9]*/

请注意,限定符出现在范围表达式之后。因此,它应用于整个范围表达式,在本例中,只指定从 0 到 9 的数字(包括 0 和 9)。

这里不使用 + 限定符,因为在第二个位置或后面的位置不一定需要有一个数字。也不使用?字符,因为它将章节编号限制到只有两位数。您需要至少匹配 Chapter 和空格字符后面的一个数字。

如果您知道章节编号被限制为只有 99 章,可以使用下面的表达式来至少指定一位但至多两位数字。

/Chapter [0-9]{1,2}/

上面的表达式的缺点是,大于 99 的章节编号仍只匹配开头两位数字。另一个缺点是 Chapter 0 也将匹配。只匹配两位数字的更好的表达式如下:

/Chapter [1-9][0-9]"jbborder">
  
    
      
      
/Chapter [1-9][0-9]{0,1}/

*、+ 和 "jbborder">

<H1>Chapter 1 – Introduction to Regular Expressions</H1>

下面的表达式匹配从开始小于符号 (<) 到关闭 H1 标记的大于符号 (>) 之间的所有内容。

/<.*>/

如果您只需要匹配开始 H1 标记,下面的“非贪心”表达式只匹配 <H1>。

/<.*?>/

通过在 *、+ 或 ? 限定符之后放置 ?,该表达式从“贪心”表达式转换为“非贪心”表达式或者最小匹配。