Chinaunix
标题:
(sed)正则表达式问题
[打印本页]
作者:
ideaz
时间:
2007-09-12 19:03
标题:
(sed)正则表达式问题
echo 'aaa:2008<hr><br>aaa:2009<hr><br>' | sed 's/.*:\([^<]*\).*/\1/'
2009
echo 'aaa:2008<hr><br>aaa:2009<hr><br>' | sed 's/[^:]*\([^<]*\).*/\1/'
:2008
这里的正则结果为什么会出现
:
,现在只需要第一个
:
到
<hr>
之间的字符。
作者:
ly5066113
时间:
2007-09-12 19:15
echo 'aaa:2008<hr><br>aaa:2009<hr><br>' | sed 's/.*:\(.*\)<hr>.*:.*/\1/'
作者:
ideaz
时间:
2007-09-12 22:43
我现在就是想懂明白,正则表达式贪婪与非贪婪的问题。
书上说[^<]这样可以非贪婪,但不明白[^:]结果为什么会有个:
作者:
starvalley
时间:
2007-09-12 22:49
因为正则表达式有最长匹配的特性
作者:
starvalley
时间:
2007-09-12 22:59
echo 'aaa:2008<hr><br>aaa:2009<hr><br>' | sed 's/[^:]*:\([^<]*\).*/\1/'
作者:
ideaz
时间:
2007-09-13 00:06
我的理解是
[^:]*
为非
:
字符的0个或者多个,所以一直到第一个
:
前
aaa
,所以就出现了
:
,后面的
[^<]
为非
<
字符的0个或者多个,所以就匹配第一个
<
之前的内容2008,因为只需要“2008”所以后面再加上一个
.*
作者:
fwloveme
时间:
2007-09-13 12:28
标题:
回复
6楼理解正确了!呵呵
作者:
mxbao
时间:
2007-09-13 16:32
sed 's/^[^0-9]*\([0-9]\+\).*/\1/'
作者:
ly5066113
时间:
2007-09-13 16:39
原帖由
ideaz
于 2007-9-13 00:06 发表
我的理解是
[^:]* 后面的[^<]为非<字符的0个或者多个,所以就匹配第一个<之前的内容2008
后面的[^<]为非<字符的0个或者多个,所以就匹配第一个<之前的内容:2008
:也是[^<]
作者:
灿烂小猪
时间:
2007-09-13 16:54
echo 'aaa:2008<hr><br>aaa:2009<hr><br>' | sed 's/^.*\:\(....\).*/\1/'
不知道我这样的写法严谨不?请大家多多指教。谢谢。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2