Ruby on rails 查找字符串中的精确单词

Ruby on rails 查找字符串中的精确单词,ruby-on-rails,ruby,regex,ruby-on-rails-3,Ruby On Rails,Ruby,Regex,Ruby On Rails 3,我有一个服装网站的链接列表,我用关键词按性别分类。根据他们的网站,他们都有不同的URL结构,例如 www.website1.com/shop/womens/tops/tshirt www.website2.com/products/womens-tshirt 我不能使用。包括吗?方法,因为不管它是.include?(“mens”)还是.include?(“womens”),它都将返回true。我怎么能有一个只对“女性”返回true的方法(反之亦然)。我怀疑它可能是某种正则表达式,但我对这些相对缺

我有一个服装网站的链接列表,我用关键词按性别分类。根据他们的网站,他们都有不同的URL结构,例如

www.website1.com/shop/womens/tops/tshirt

www.website2.com/products/womens-tshirt


我不能使用。包括吗?方法,因为不管它是.include?(“mens”)还是.include?(“womens”),它都将返回true。我怎么能有一个只对“女性”返回true的方法(反之亦然)。我怀疑它可能是某种正则表达式,但我对这些相对缺乏经验,不同的URL结构使它更加棘手。非常感谢您的帮助,谢谢

您可以使用
/
进行拆分,并检查所需组件上的字符串是否相等--不需要正则表达式如果您首先检查
是否为女性
,它应该可以工作:

# assumes str is not nil
def gender(str)
  if str.include?("women")
    "F"
  elsif str.include?("men") 
    "M"
  else
    nil
  end
end
如果这不是你想要的,请更详细地解释你的问题

keyword = "women"
url = "www.website1.com/shop/womens/tops/tshirt"
/\/#{keyword}/ =~ url 
=> 21
keyword = "men"
url = "www.website1.com/shop/womens/tops/tshirt"
/\/#{keyword}/ =~ url 
=> nil
keyword = "women"
url = www.website2.com/products/womens-tshirt
/\/#{keyword}/ =~ url 
=> 25
keyword = "men"
url = www.website2.com/products/womens-tshirt
/\/#{keyword}/ =~ url 
=> nil
然后做一个
在其上:

=> !!nil => false
=> !!25 => true

执行此操作的规范正则表达式方法是在单词边界上搜索:

pry(main)> "foo/womens/bar".match(/\bwomens\b/)
=> #<MatchData "womens">
pry(main)> "foo/womens/bar".match(/\bmens\b/)
=> nil
pry(main)> "foo/mens/bar".match(/\bmens\b/)
=> #<MatchData "mens">
pry(main)> "foo/mens/bar".match(/\bwomens\b/)
=> nil
pry(main)>“foo/womens/bar”。匹配(/\bwomens\b/)
=> #
撬(主)>“foo/womens/bar”。匹配(/\bmens\b/)
=>零
撬(主)>“foo/mens/bar”。匹配(/\bmens\b/)
=> #
撬(主)>“foo/mens/bar”。匹配(/\b女性\b/)
=>零

也就是说,拆分或使用前导的
“/”
搜索可能就足够了。

真的需要双重否定吗?我在静态类型语言中使用它,只是想知道这里的参数是什么?双重否定将一切都转换为真或假。所以零或假变假,其他一切变真。OP需要返回一个布尔值。我知道双反运算是如何工作的。OP没有对布尔类型提出严格要求,在Ruby中,所有不是
nil
false
的都是
true
。我只是想知道使用它是否还有其他理由。不,只是OP.21中的“只会为“女性”返回true”一句话不是“true”。如果你把它作为布尔表达式使用,但不确定它是如何使用的,这是一个我没有想到的聪明的方法。我使用Dave Newton方法是因为它更简洁,但我给了你一个特别推荐的投票。作为记录,单词字符不包括破折号或下划线之类的东西,因此这些都算作单词边界,所以如果字符串中有这些东西,那么这种方法就不起作用了。