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

标签 regex sed pcre greedy regex-greedy

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

所以来自:

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

我想要:

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

(有或没有尾部斜杠都没关系)

我已经尝试过:

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

和(转义非贪婪量词)

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

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

最佳答案

基本的和扩展的 Posix/GNU 正则表达式都不能识别非贪婪量词;你需要稍后的正则表达式。幸运的是,这种情况下的 Perl 正则表达式很容易获得:

perl -pe 's|(http://.*?/).*|\1|'

关于regex - sed 中的非贪婪(不情愿)正则表达式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1103149/

相关文章:

java - 如何在 Java 中创建正则表达式

java - 为什么^(?: x + y){5} $的性能比^ x + yx + yx + yx + yx + y $慢

regex - 行尾字符 ($) 在方括号内不起作用

php - 防止 sed 扩展变量

python - 匹配除三个连续双引号之外的所有内容

windows - 有没有人为 Windows x64 编译 PCRE - 如果是这样,怎么做?

regex - 加载错误 : PCRE compilation error: lookbehind assertion is not fixed length

java - 如何在冒号之前的分号处分割字符串

regex - Sed 替换文本

linux - 在 linux 中使用 sed 取消注释并注释一行配置文件