寻找特定的字符串

时间:2013-01-21 13:27:02

标签: ruby regex

我的字符串格式为http://www.abc.com/zyx/yxc/asd/?asd

我想写一个只读http://www.abc.com/作为前19个字符的正则表达式。如果搜索字符串不在此位置,则不应匹配。

我可以使用正则表达式^[http://www.abc.com]$搜索字符串,但我也要指定位置

3 个答案:

答案 0 :(得分:1)

如果正则表达式听起来很复杂,您可以使用普通string comparison。类似的东西: -

str.index('http://www.abc.com/') == 0

如果您想要regex,那么

/^http:\/\/www.abc.com\//

答案 1 :(得分:0)

如果您必须使用'http://www.abc.com/'完全检查字符串启动,则可以使用start_with?方法,如下所示:

str.start_with? 'http://www.abc.com/'  # => true

请注意,如果你想要查看特定位置的子字符串,你可以通过传递一个范围而不是数字来获取[]运算符:

str[0..18] # => 'http://www.abc.com/'

然后,您可以将您希望的任何正则表达式应用于str[0..18]

的结果
str[0..18] =~ /some [hard] regex/

但是,如果你想检查完全匹配,那么start_with?的第一个例子似乎更优雅,因为它不包含任何硬编码数字,也不需要正则表达式。

P上。秒。 BONUS:对我来说这是令人惊讶的,但是[]运算符(这是slice方法的同义词)不仅可以采用数字和数字范围,还可以采用字符串部分和正则表达式。所以你甚至可以str[0..18][/some [hard] regex/],它会返回匹配的部分或nil

答案 2 :(得分:0)

使用URL的正确方法是使用URL解析器。 Ruby的内置URI将完成这项工作:

require 'uri'

uri = URI.parse('http://www.abc.com/zyx/yxc/asd/?asd')

uri.scheme # => "http"
uri.host   # => "www.abc.com"
uri.path   # => "/zyx/yxc/asd/"
uri.query  # => "asd"
'%s://%s' % [uri.scheme, uri.host] # => "http://www.abc.com"

请注意,path包含前导/,因此正确的主机网址不包含/。如果需要,您可以轻松添加。

现在,让我们来看看您尝试使用的正则表达式模式:

^[http://www.abc.com]$

这说:

  1. 正则表达式引擎应找到该行的开头:^
  2. 查找以下字符中的任何单个字符:"h", "t", "p", ":", "/", "w", ".", "a", "b", "c", "o", "m"
  3. 正则表达式引擎应该找到字符串的结尾:$
  4. 换句话说,它正在寻找一行中的单个字符。