Ruby 查找特定字符串

Ruby 查找特定字符串,ruby,regex,Ruby,Regex,我有一个字符串,它的形式是 我想写一个正则表达式,它只读取前19个字符。如果搜索字符串不在此位置,则不应匹配 我可以使用正则表达式^[http://www.abc.com]$但我还想指定位置如果正则表达式听起来很复杂,可以使用普通的。比如:- str.index('http://www.abc.com/') == 0 如果你想要一份工作,那就是 /^http:\/\/www.abc.com\// 如果必须检查字符串是否以开头http://www.abc.com/“,您可以使用以下方法: st

我有一个字符串,它的形式是

我想写一个正则表达式,它只读取前19个字符。如果搜索字符串不在此位置,则不应匹配

我可以使用正则表达式
^[http://www.abc.com]$
但我还想指定位置

如果正则表达式听起来很复杂,可以使用普通的。比如:-

str.index('http://www.abc.com/') == 0
如果你想要一份工作,那就是

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

如果必须检查字符串是否以
开头http://www.abc.com/“
,您可以使用以下方法:

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\u with?
的示例似乎更加优雅,因为它不包含任何硬编码数字,也不需要正则表达式


附言奖金:这让我很惊讶,但是[]操作符(它是
slice
method的同义词)不仅可以获取数字和数字范围,还可以获取字符串部分和正则表达式。因此,您甚至可以执行
str[0..18][/some[hard]regex/]
,它将返回匹配的部分或
nil

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

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"
请注意,
路径
包含前导的
/
,因此正确的主机URL不包含
/
。如果你愿意,你可以很容易地添加它

现在,让我们来看看你试图使用的正则表达式:

^[http://www.abc.com]$
上面说:

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

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

    它应该匹配前19个字符还是域名。这似乎令人困惑。如果它只有19个字符,你将不需要正则表达式,只需要简单的比较。显然没有研究这个问题的努力。糟糕的是,我还不能设置投票。它应该匹配前19个字符和域名。你可以用你提供的正则表达式搜索你的字符串,但它将始终返回FALSE。您的正则表达式正在匹配一个字符串,该字符串正好是方括号中的其中一个字符。它将在整个字符串中搜索该字符串,我希望它仅在1到19个字符中搜索,如果只有前19个字符与条件完全匹配,则应返回true。我可以使用以下表达式搜索字符串
    ^[http://www.abc.com]$
    但我还想指定位置。@GauravSharma您的语言是否支持
    子字符串
    运算符<代码>如果(str.length>=20&&str.substring(1,19)==yourstring)例如,使用适当的字符串比较函数。我想在Ruby中执行此操作,但我认为不存在substring运算符,有一种扫描方法可以执行同样的操作。使用索引ruby方法更新,在rubular
    /^http:\/\/www.abc.com\/
    上测试的正则表达式不正确<代码>正则表达式中的字符是通配符,这将使该模式匹配
    http://wwwzabczcom
    。我会使用类似于
    %r”的东西http://www\.abc\.com“
    或将字符串传递到
    Regexp.escape('http://www.abc.com)
    返回
    http://www\.abc\.com
    ,然后使用
    Regexp.new(Regexp.escape)将其嵌入到模式中http://www.abc.com)
    看起来像:
    (?-mix:http:\/\/www\.abc\.com)