我的字符串格式为http://www.abc.com/zyx/yxc/asd/?asd
我想写一个只读http://www.abc.com/作为前19个字符的正则表达式。如果搜索字符串不在此位置,则不应匹配。
我可以使用正则表达式^[http://www.abc.com]$
搜索字符串,但我也要指定位置
答案 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]$
这说:
^
"h", "t", "p", ":", "/", "w", ".", "a", "b", "c", "o", "m"
$
换句话说,它正在寻找一行中的单个字符。