极小元的概念
定义:对于任何的集合S1与S2,当S1∈S2且S1∩S2=空(没有空这个符号,我用中文字空代替)时,则称S1为S2的一极小元。
OK说完了定义,我们来说说关于正则匹配的东东,可以把要寻找的那个字符串看成一个集合S1,而要寻找的是一个极小元,也就是一个子集
而离散的正则定理:每个不空的集合,都有一极小元,明确的说出了,正则匹配的道理,我们要去寻找的是一个子集,也就是把大的字符串进行了分割,而其元素为一个个小的字符串子集
正则公理的数学表达式:A≠空 推出 (存在x)(x∈A∧x∩A=空)
现在是编译原理篇,编译原理是根据离散的内容而来的
首先是要说正规文法和有限自动机
正规文法(Chomsky 3型文法)
正规式(Regular Expression):
定义:设A是非空的有限字母表,则:
1)任意,空,全集都是正规式
2)若α,β是正则,则α|β,α·β,α*,β*也是正则(关于这个是涉及到文法的问题了,也就是大家常用的w+之类的东东了)
3)正则只能通过有限次使用1,2规则而获得
写点儿正规式大家都熟悉的α=a+b+c+所代表的正规集为L(α),它可以写作
L(α)={abc,aabc,abc,abcc,aaabc…}看到这里大家如果用过正则的话,可以很明白的看出来联系了
关于正规集的一些数学方面的东东我就不多说了,比如交换率,结合率之类的
而关于多个一个一长串的比如用或语句进行的东西还需要进行方程组的运算,不过说了
其实这里还有一个概念就是当你用while之类的语句的时候其实就是底层在用正则公式,而js或vbs用正则之所以慢是因为多重的正则寻找,就是正则下的正则,可以看看木狐狸的一个寻找的最优公式的贴子,在多重寻找之后速度自然就慢了
现在用VBS写一下,简单的事例
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>新建网页 3</title>
</head>
<script language="vbscript">
str="ssuuiadseestiaosu"
dim regex,match
set regex=new RegExp '设置正则对象
regex.Global = True '设置全局匹配
regex.IgnoreCase = false '设置区分大小写,如果false 是区分大小写的
regex.pattern="[a-z]" '设置匹配内容
set mm=regex.execute(str) '执行
for each match1 in mm '在数组中查看
document.write match1
document.write("<br>")
document.write match1.FirstIndex
document.write("<br>")
next
</script>
<body>
</body>
</html>