【问题标题】:What is the ruby regex to get a specific part of this URL?获取此 URL 特定部分的 ruby​​ 正则表达式是什么?
【发布时间】:2012-10-02 13:48:39
【问题描述】:

我正在尝试获取一些亚马逊商品的 ASIN。我发现了一个模式:ASIN 总是在“/dp/”之后。如何从该字符串中提取 ASIN (B003CP0V6S)? 我正在使用红宝石

url = "http://www.amazon.it/Calvin-Klein-Deluxe-K0S21120--Orologio/dp/B003CP0V6S/ref=lp_1597641031_1_8?ie=UTF8&qid=1349983393&sr=1-8"

【问题讨论】:

  • 当我有这样的问题时,我总是去rubular.com - 一个很棒的小工具,可以让你调整正则表达式并了解不同选项的工作原理

标签: ruby regex string url


【解决方案1】:

在编写用于 URL 的 Ruby 正则表达式时,有些人喜欢使用替代语法,因为斜线字符的所有转义都会影响可读性。将正则表达式括在 %r{} 中可以使正斜杠不转义。

  str = "http://www.amazon.it/Calvin-Klein-Deluxe-K0S21120--Orologio/dp/B003CP0V6S/ref=lp_1597641031_1_8?ie=UTF8&qid=1349983393&sr=1-8"
  (str =~ %r{/db/(.+?)/} && $1)

【讨论】:

  • 如果没有 str 的定义,这个答案本身并不能很好地站立:它与 OP 的 url 不匹配。
  • @pje,好的,分配给str 已添加。
【解决方案2】:
url.split("/dp/").last.split("/", 2).first

应该这样做。

【讨论】:

    【解决方案3】:
    str = "http://www.amazon.it/Calvin-Klein-Deluxe-K0S21120--Orologio/dp/B003CP0V6S/ref=lp_1597641031_1_8?ie=UTF8&qid=1349983393&sr=1-8"
    (match = str.match(/\/dp\/([^\/]*)/)) && match[1]
    # => "B003CP0V6S"
    

    【讨论】:

    • 我得到一个错误:str.match(/\/dp\/([^\/]*)/)) && match[1] SyntaxError: (irb):27: 语法错误,意外的')',期待 $end str.match(/\/dp\/([^\/]*)/)) && match[1]
    • 那是因为你剪切并粘贴了代码而没有从一开始就得到(match =
    猜你喜欢
    • 2016-12-27
    • 2014-09-04
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 2020-08-17
    相关资源
    最近更新 更多