Ruby 查找特定字符串
我有一个字符串,它的形式是 我想写一个正则表达式,它只读取前19个字符。如果搜索字符串不在此位置,则不应匹配 我可以使用正则表达式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
^[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)
。