正规式是一种表示正规集的工具,正规式是描述程序语言单词的表达式,对于字母表Σ。
正规式(正规表达式)的运算符有3个,优化级从高到低顺序排列为:*(闭包)、·(连接,可省略)、|(或)。
正规式 → 正规集
ab → 字符串ab构成的集合
a|b → 字符串a、b构成的集合
a* → 由0个或多个a构成的字符串集合
(a|b)* → 所有字符a和b构成的串的集合
a(a|b)* → 以a为首字符的a、b字符串的集合
(a|b)*abb → 以abb结尾的a、b字符串的集合
有限自动机可以转换为正规式,正规式也可以转换为有限自动机。
词法分析器的构造步骤:
1)用正规式描述语言中的单词构成规则。
2)为每个正规式构造一个NFA,它识别正规式所表示的正规集。
3)将构造出的NFA转换成等价的DFA。
4)对DFA进行最小化处理,使其最简。
5)从DFA构造词法分析器。
个人感觉画出NFA最直观易懂了。前一个正规式仅有一个状态(开始和接受状态同),后一个虽然是三个状态,但是其中一个是绕着a闭包的状态,一个是绕着b闭包的状态,而这两个状态又是绕着第三状态(既是开始状态又是接受状态)进行闭包,所以实际上可合并为一种状态,即是说这两个正规式对应于同一个NFA,所以相等是显然成立的。//必须十一位数,包括数字和字母,且以字母开头
Pattern pattern = Pattern.compile("^[a-zA-Z][a-zA-Z0-9]{10}$")//将给定的正则表达式编译到模式中
//判读存款金额是否合法(单次存款金额不超过10000元(包括),且必须是100的整数倍)
Pattern pattern = Pattern.compile("^[1-9][0-9]{0,1}00$|^10000$")
//判断取款金额是否合法(单次取款金额不超过3000(包括)元,且必须是100的整数倍.)
Pattern pattern = Pattern.compile("^[1-3][0-9]{0,1}00$")
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)