LinuxSir.cn,穿越时空的Linuxsir!

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

请问正则式中最小匹配问题

[复制链接]
发表于 2005-1-5 09:46:11 | 显示全部楼层 |阅读模式
比如有如下的一行
str=abc:def:gihd
我想匹配从“str=”到第一个“:”,如果用“/str=.*:”会匹配到最后一个“:”,请问用正则式如何做?
我知道用“?”是非贪婪的匹配,但却不知道该怎么做。谢谢。
发表于 2005-1-5 10:14:16 | 显示全部楼层
/str=.*?:/
 楼主| 发表于 2005-1-5 11:26:16 | 显示全部楼层
谢谢回复。我试过用
sed -e 's/str=.*?:/AA/g' test
但什么也没有改变。如果用
sed -e 's/str=.*:/AA/g' test
结果是
AAgihd
把“:”全部都匹配了。
 楼主| 发表于 2005-1-5 11:42:56 | 显示全部楼层
我想到了一个方法
/str=[^:]*:/
大家还有其它的吗?
发表于 2005-1-5 11:51:57 | 显示全部楼层
sed -e 's/str=.*:\{1\}/AA/g' test
呢?
 楼主| 发表于 2005-1-5 12:36:05 | 显示全部楼层
谢谢forrest。我试过了,但还是要最大匹配。
发表于 2005-1-5 14:23:54 | 显示全部楼层
Post by freefall
/str=.*?:/

perl是这样用的:

  1. echo 'str=ab:cd:ef' |perl -pe 's/str=.*?:/AA/'
复制代码
 楼主| 发表于 2005-1-5 16:33:44 | 显示全部楼层
终于明白sed的“?”为什么不能用,应该这样
sed -e 's/str=.*\?:/AA/g' test
才能最小匹配
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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