三种基本文法运算符
1. 空格 表示字符串的连接
x ::= y z x由一个y加一个z组成
2. * 表示字符串的重复
x ::= y* x由0个或多个y组成
3. | 表示两者之一
x ::= y | z x由一个y或一个z组成
与其他运算符的组合
4. ? 表示0个或1个
x ::= y? x或者是空字符串,或者是y
5. + 表示1个或多个
x ::= y+ x由一个y或多个y组成
与 x ::= y y* 等价
6. [...] 表示[]中多个字符的或
x ::= [abc] 与 x ::= 'a' | 'b' | 'c' 等价
7. [^...] 表示[]以外的unicode的或
x ::= [^abc] 与 x ::= 'd' | 'e' | 'f' | ... 等价
8. (...) 表示()内是一个整体
x ::= (y z)+ x由一个yz或多个yz组成
例子:URL
一个简单的url: url ::= 'http://' [a-z]+ '.' [a-z]+ '/'
例如:'http://mit.edu/'
稍微复杂一点: url ::= 'http://' hostname (':' port)? '/'
hostname ::= word '.' hostname | word '.' word
word ::= [a-z]+
port ::= [0-9]+
例如:url ::= 'http://didit.csail.mit.edu:4949'
正则语言中的一些特殊符号
1. . 一个点,表示任何一个character字符
2. \d 表示任何数字,与[0-9]相同
3. \s 表示任何空白字符,包括空格、tab、空行
4. \w 表示任何字符,包括字母和数字
5. \., \(, \), \*, \+, ...