猿问

非贪婪(不情愿)正则表达式匹配?

非贪婪(不情愿)正则表达式匹配?

我试图使用sed来清理URL行,只提取域。

因此:

http://www.suepearson.co.uk/product/174/71/3816/

我要:

http://www.suepearson.co.uk/

(无论有没有火车斜杠,这都不重要)

我试过:

 sed 's|\(http:\/\/.*?\/\).*|\1|'

和(逃避非贪婪量词)

sed 's|\(http:\/\/.*\?\/\).*|\1|'

但我似乎不能让非贪婪的量词工作,所以它总是匹配整个字符串。


jeck猫
浏览 692回答 3
3回答

眼眸繁星

无论是基本的POSIX/GNU正则表达式还是扩展的POSIX/GNU正则表达式都不会识别非贪婪的量词;您需要稍后的正则表达式。幸运的是,用于此上下文的Perl regex非常容易获得:perl -pe 's|(http://.*?/).*|\1|'

慕码人8056858

在这种特殊情况下,您可以完成任务而不用使用非贪婪的正则表达式。试试这个非贪婪的正则表达式[^/]*而不是.*?:sed 's|\(http://[^/]*/\).*|\1|g'
随时随地看视频慕课网APP
我要回答