LinuxSir.cn,穿越时空的Linuxsir!

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

这个正则表达式究竟该如何区别

[复制链接]
发表于 2006-11-18 22:51:40 | 显示全部楼层 |阅读模式
/\s.*\s/和/\s.*?\s/究竟该怎么区别,搞不懂,望高手给讲解一下
发表于 2006-11-18 23:04:47 | 显示全部楼层
I'm not export
Sample
    aaaa   bbb ccc
/\s.*\s/
.* will be: aaaa bbb
/\s.*?\s/
.* will be: aaa
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-18 23:10:29 | 显示全部楼层
为什么?可以解释一下吗?
回复 支持 反对

使用道具 举报

发表于 2006-11-18 23:34:58 | 显示全部楼层
是perl的regex吧?
?,即有或者没有,如:
/home/lee#echo 'abc
bc
ddd'|grep '[a]\?bc' #找出有a或者没a,后接字符串bc的匹配
abc
bc
回复 支持 反对

使用道具 举报

发表于 2006-11-19 01:12:33 | 显示全部楼层
嘿嘿,抱歉,新装的ubuntu,还不知道怎么整治输入法...
资料里应该有写的,正则表达式里*,+都是“贪婪”的,会尝试尽可能多的匹配,一直到让表达式无法匹配为止。
后面加个 ? ,就是消除贪婪属性,刚刚一符合条件,就继续后面的
回复 支持 反对

使用道具 举报

发表于 2006-11-19 03:08:09 | 显示全部楼层
哎呀,原来有个“吝啬”规则。
*或\+或{m,n} 加上 ?及其后续的字符 组成“吝啬”规则。
*或\+或{m,n}  则组成“贪婪”规则。
谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-19 08:36:56 | 显示全部楼层
谢谢yanwuhuan,书道用时方恨少,呵呵
回复 支持 反对

使用道具 举报

发表于 2006-11-19 12:38:16 | 显示全部楼层
怎么在shell下不管用:
echo 'abcd egfh ijk' | egrep -o '.*? '
abcd egfh
echo 'abcd egfh ijk' | egrep -o '.* '
abcd egfh
回复 支持 反对

使用道具 举报

发表于 2006-11-19 14:59:47 | 显示全部楼层
Post by linux_now
怎么在shell下不管用:
echo 'abcd egfh ijk' | egrep -o '.*? '
abcd egfh
echo 'abcd egfh ijk' | egrep -o '.* '
abcd egfh

需要前驱字符
回复 支持 反对

使用道具 举报

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

本版积分规则

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