精通正则表达式( Mastering Regular Expressions) [Third Edition]

   读者最好能养成按照字符来理解正则表达式的习惯.(p.8)

   如果连字符出现在字符组的开头, 他表示的就是一个普通字符, 而不是一个范围. 同样的道理, 问号和点号通常被当作元字符处理, 但在字符组中则不是如此(说明白一点就是, [0-9A-Z_!.?]里面, 真正的特殊字符只有那两个连字符).(p.9)

   请记住, 排除行字符组表示"匹配一个未列出的字符(match a character that's not listed)", 而不是"不要匹配列出的字符(don't match what is listed)".

   …

   在字符组里面和外面, 元字符的定义和意义是不一样的.(p.11)

   一个字符组智能匹配目标文本中的单个字符, 而每个多选结构自身可能是完整的正则表达式, 都可以匹配任意长度的文本.(p.13)

   请注意, '<'和'>'本身并不是元字符.(p.15)

   无论列出的字符有多少, 字符组只能匹配一个字符. 相反, 多选项可以匹配任意长度的文本, 每个多选项可能匹配的文本都是独立的, .... 不过, 多选项没有像字符组那样的排出功能.(p.16)

   'u?' 这个元字符与我们之前看到的元字符都不相同, 他只作用于之前紧邻的元素. 因此, 'colour?r' 的意思是: 'c', 然后是'o', 然后是'l', 然后是'o', 然后是'u?', 最后是'r'.(p.17)

   正则表达式不是死板的教条, 它更像是门艺术.

   …

   问号, 加号和星号这3个元字符, 统称为量词(quantifiers), 因为它们限定了所作用元素的匹配次数.(p.18)

   …

   一个字符组是一个"元素"(unit), 所以它可以直接加加号, 星号等, 而不需要加括号.(p.18)

   括号是按照开括号'('从左至右的出现顺序进行的, 所以'([a-z])([0-9])\1\2'中的'\1'代表'[a-z]'匹配的内容, 而'\2'代表'[0-9]'匹配的内容.(p.18)

   一个字符组是一个"元素"(unit), 所以它可以直接加加号, 星号等, 而不需要括号.(p.19)

   括号是按照开括号'('从左至右的出现顺序进行的, 所以'([a-z])([0-9]) \1\2 '中的'\1'代表'[a-z]'匹配的内容, 而'\2'代表'[0-9]'匹配的内容.(p.21)

   真正匹配文本中点号的元序列应该是反斜线(backslash)加上点号的组合:'ega\.att\.com'。 '\.'称为"转义的点号"或者"转义的句号", 这样的办法适用于所有的元字符, 不过在字符组内部无效.

   ...

   如果反斜线后紧跟的不是元字符, 反斜线的意义就依程序的版本而定.(p.22)

变量名

   [a-zA-Z_][a-zA-Z_0-9]*

引号内的字符串

   "[^"]*"

美元金额

   \$[0-9]+(\.[0-9][0-9])?

HTTP/HTML URL

   \http://[-a-z0-9_.:]+/[-a-z0-9_:@&?=+,.!/~*%$]*\.html?\

表示时刻的文字, 例如 "9:17 am" 或者 "12:30 pm"

12小时制   (1[012]|[1-9]):[0-5][0-9] (am|pm)

24小时制   (0?[0-9]|1[0-9]|2[0-3])   尾部同上

       或     ([01]?[4-9]|[012]?[0-3])  尾部同上

   (p.27~28)

正则表达式术语汇总

             正则                      regex

             匹配                      matching

             元字符                  metacharacter

             流派                      flavor

             子表达式             subexpression

             字符                      character

posted @ 2011-04-02 19:00  walfud  阅读(417)  评论(0编辑  收藏  举报