发布
社区首页 >问答首页 >sed中的非贪婪(不情愿)正则表达式匹配?

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

Stack Overflow用户
提问于 2009-07-09 18:47:31
回答 17查看 270K关注 0票数 455

我正在尝试使用sed来清理URL行,以便仅提取域。

所以出自:

代码语言:javascript
代码运行次数:0
复制
http://www.suepearson.co.uk/product/174/71/3816/

我想要:

代码语言:javascript
代码运行次数:0
复制
http://www.suepearson.co.uk/

(无论是否使用尾部斜杠,都无关紧要)

我试过了:

代码语言:javascript
代码运行次数:0
复制
 sed 's|\(http:\/\/.*?\/\).*|\1|'

and (转义非贪婪量词)

代码语言:javascript
代码运行次数:0
复制
sed 's|\(http:\/\/.*\?\/\).*|\1|'

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

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2009-07-09 10:58:23

基本的和扩展的Posix/GNU正则表达式都不能识别非贪婪量词;您需要一个新的正则表达式。幸运的是,这种上下文的Perl正则表达式非常容易获得:

代码语言:javascript
代码运行次数:0
复制
perl -pe 's|(http://.*?/).*|\1|'
票数 465
EN

Stack Overflow用户

发布于 2009-07-09 10:51:35

在这种特定情况下,您可以在不使用非贪婪正则表达式的情况下完成工作。

尝试这个非贪婪的正则表达式[^/]*而不是.*?

代码语言:javascript
代码运行次数:0
复制
sed 's|\(http://[^/]*/\).*|\1|g'
票数 297
EN

Stack Overflow用户

发布于 2009-07-09 11:08:45

sed不支持“非贪婪”运算符。

您必须使用"[]“运算符从匹配中排除"/”。

代码语言:javascript
代码运行次数:0
复制
sed 's,\(http://[^/]*\)/.*,\1,'

附注:不需要反斜杠"/“。

票数 38
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1103149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档