LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 854|回复: 6

关于正则表达式中. * ?的问题

[复制链接]
发表于 2005-5-22 17:15:04 | 显示全部楼层 |阅读模式
首先是.和*:这个我有点清楚,.和*不是同一类的。前者是能够被看做单个字符的元字符,后者则是用来修改它前面的字符的字符。
但是.*确让我糊涂了,我看书上说例如 A.*E能够匹配以A开头,以E结尾的所有字符串。但是我的理解确实A.*E只能匹配AWWWWWE,或者ACCCCCE之类的,总之A和E之间的必须一样。因为不是说.匹配的是任意一个字符,而*则是匹配它前面的任意一个字符吗?
请高手解释一下!
发表于 2005-5-22 17:43:52 | 显示全部楼层
书上说的是对的。
在flex里头 . 匹配除回车换行以外的所有单个字符。
为了简化字符集,假定 . 集为 [a-z]
那么.* 就相当于 [a-z]*, 其数学意义是 [a-z]的clene闭包。
回复 支持 反对

使用道具 举报

发表于 2005-5-22 18:35:57 | 显示全部楼层
楼上说的对

再说白一点
就是.*中.可能是任意某一字符,*也可是任意多的某一字符(也是不确定的)
回复 支持 反对

使用道具 举报

发表于 2005-5-22 21:20:12 | 显示全部楼层
你把*理解为一个闭包运算就可以了
回复 支持 反对

使用道具 举报

发表于 2005-5-22 21:23:57 | 显示全部楼层
闭包太专业了吧。
都忘记闭包是啥意思了,是不是满足条件的最小集?
回复 支持 反对

使用道具 举报

发表于 2005-5-22 22:18:01 | 显示全部楼层
不是。
可以参考离散数学课本。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-23 09:14:41 | 显示全部楼层
主要我的理解是先把 . 变成了某一个字符,也就是说比如先把. 变成A,然后再对A做*操作。这样的话只能产生任意个A,而不是任意个任意字符了。
各位的意思是两者不能分开去考虑,如果要“实例化”的话,必须同步进行,是这样吗?
还有,感觉*和闭包不一样吧?
《sed与awk》中对*的解释是这样的:匹配任意一个(包括零个)在它前面的字符(包括由正则表达式指定的字符)。
哦,我突然想明白了,其实[0-9]* 等同于[0-9][0-9][0-9][0-9][0-9]......吧,这样的话。。。嘿嘿,明白啦!
谢谢各位。。。。!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表