Ruby 要匹配的正则表达式在这个或那个之前查看

Ruby 要匹配的正则表达式在这个或那个之前查看,ruby,regex,Ruby,Regex,我正在尝试匹配url的内部 www.facebook.comhttp://www.facebook.comhttp://facebook.com 应该返回facebook 我当前的正则表达式是Ruby中的(?),您可以使用: (?i)^(?:http://)?(?:\w+\.)?\K\w+(?=\.[a-z]{2,4}$) 看 ^断言我们位于字符串的开头 (?i)使我们处于不区分大小写的模式 (?:http://)?可以选择匹配http://部分 (?:\w+\)?可以选择匹配子域 \K将我

我正在尝试匹配url的内部

www.facebook.com
http://www.facebook.com
http://facebook.com

应该返回
facebook


我当前的正则表达式是Ruby中的
(?),您可以使用:

(?i)^(?:http://)?(?:\w+\.)?\K\w+(?=\.[a-z]{2,4}$)

  • ^
    断言我们位于字符串的开头
  • (?i)
    使我们处于不区分大小写的模式
  • (?:http://)?
    可以选择匹配
    http://
    部分
  • (?:\w+\)?
    可以选择匹配子域
  • \K
    将我们已匹配的内容从要返回的匹配中排除
  • \w+
    匹配
    facebook
  • (?=\.[a-z]{2,4}$)
    lookahead检查它后面是域,然后是字符串的结尾

在python中,我使用re中的sub解决了这个问题:

from re import sub
x = "http://www.facebook.com" #hypothetical website
y = sub("(.*www\.|http:\/\/)(.*)\.com","\\2",x) 
print y
输出“facebook”


希望这能转化为Ruby并对您有所帮助!

为什么您试图使用lookback而不是使用基本分组?仅供参考,添加了演示和说明。:)