-1

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

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

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

4

3 回答 3

1

如果正则表达式听起来很复杂,您可以使用纯字符串比较。就像是 :-

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

如果你想要一个正则表达式,它将是

/^http:\/\/www.abc.com\//
于 2013-01-21T13:30:11.957 回答
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?似乎更加优雅,因为它不包含任何硬编码数字并且不需要正则表达式。

附言 奖励:令我惊讶的是,[ ] 运算符(它是slice方法的同义词)不仅可以获取数字和数字范围,还可以获取字符串部分和正则表达式。所以你甚至可以这样做str[0..18][/some [hard] regex/],它会返回匹配的部分或nil

于 2013-01-21T15:16:22.560 回答
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包含前导/,因此正确的主机 URL 不包含/. 如果你愿意,你可以很容易地添加它。

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

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

这说:

  1. 正则表达式引擎应该找到该行的开头:^
  2. 在这些字符中查找任何单个字符:"h", "t", "p", ":", "/", "w", ".", "a", "b", "c", "o", "m"
  3. 正则表达式引擎应该找到字符串的结尾:$

换句话说,它正在寻找一行中的单个字符。

于 2013-01-21T17:37:09.590 回答