草庐IT

ruby-on-rails - RSpec:通过正则表达式匹配字符串数组

我正在使用rspec测试我的模型的验证,并期待一条错误消息。但是,消息的确切文本可能会发生变化,所以我想更宽容一点,只检查部分消息。由于Spec::Matchers::include方法只适用于字符串和集合,我目前正在使用这个结构:@user.errors[:password].any?{|m|m.match(/istooshort/)}.shouldbe_true这可行,但对我来说似乎有点麻烦。是否有更好(即更快或更像ruby​​)的方法来检查数组是否包含正则表达式的字符串,或者是否有一个rspec匹配器可以做到这一点? 最佳答案

ruby - 正则表达式 "empty range in char class error"

我的代码中有一个正则表达式,用于匹配url的模式并抛出错误:/^(http|https):\/\/([\w-]+\.)+[\w-]+([\w-.\/?%&=]*)?$/错误是“字符类错误中的空范围”。我发现原因在([\w-.\/?%&=]*)?部分。Ruby似乎将\w-.中的-识别为范围运算符,而不是文字-。给dash加上escape后问题解决。但原来的正则表达式在我同事的机器上运行良好。我们使用相同版本的osx、rails和ruby:Ruby版本是ruby1.9.3p194,rails是3.1.6,osx是10.7.5。在我们将代码部署到我们的Heroku服务器之后,一切都运行良好。

ruby 正则表达式 "contains a word"

在Ruby中,如何编写正则表达式来检查提交的单个单词?假设我有一个接受文本的Web表单。我知道如果我想看看句子--only--是否包含"join"我可以使用ifthe_body=="join"但这只有在整个文本提交都是“加入”时才有效。如何捕捉这样的提交:“我想加入你们的俱乐部?”或者“请加入我”谢谢! 最佳答案 你可以这样做string=~/join/i#/imakesitcaseinsensitive或string.match(/join/i)关于性能评论的一点更新:>>s="iwanttojoinyourclub">>n=50

Ruby 正则表达式\1 对 gsub 意味着什么

\1是做什么的?例如"foobarbag".gsub(/(bar)/,'car\1')我相信这与您使用括号的方式有关,但我不太确定。有人可以向我解释吗?你能做像\2这样的事情吗?如果是这样,那会做什么? 最佳答案 您在搜索部分用括号括起来的每个项目将对应于替换部分中的一个数字\1、\2等。在您的示例中,只有一个项目被括号包围,即"(bar)"项目,因此您放置\1的任何地方都是括号,将被换入。你可以多次输入\1,如果你想重复找到的项目,这很方便,所以你可以合法地写car\1\1\1和"bar"将交换三次。\2没有用处,因为括号中只有一

ruby,使用正则表达式查找两个字符串之间的内容

使用Ruby+正则表达式,给定:starting-middle+31313131313@mysite.com我只想获取:31313131313即starting-middle+和mysite.com之间是什么这是我目前所拥有的:to='starting-middle+31313131313@mysite.com'to.split(/\+/@mysite.com.*/).first.strip 最佳答案 在第一个+和第一个@之间:to[/\+(.*?)@/,1]在第一个+和最后一个@之间:to[/\+(.*)@/,1]在最后一个+和最

ruby - 正则表达式匹配 string1,除非前面有 string2

使用Ruby,我如何使用单个正则表达式来匹配“xyyayxy+y”中所有出现的“y”且前面没有x(y,ay,+y)?/[^x]y/也匹配前面的字符,所以我需要一个替代... 最佳答案 您需要一个零宽度的否定后视断言。尝试/(?它准确说明了您要查找的内容,即找到所有“y”前面没有“x”,但不包括前面的字符,即零宽度部分。编辑添加:显然这仅受Ruby1.9及更高版本的支持。 关于ruby-正则表达式匹配string1,除非前面有string2,我们在StackOverflow上找到一个类似的

ruby - 多字节字符是否会干扰正则表达式中的结束行字符?

使用这个正则表达式:regex1=/\z/以下字符串匹配:"hello"=~regex1#=>5"こんにちは"=~regex1#=>5但是使用这些正则表达式:regex2=/#$/?\z/regex3=/\n?\z/他们表现出不同:"hello"=~regex2#=>5"hello"=~regex3#=>5"こんにちは"=~regex2#=>nil"こんにちは"=~regex3#=>nil什么是干扰?字符串编码为UTF-8,操作系统为Linux(即$/为"\n")。多字节字符是否会干扰$/?怎么办? 最佳答案 你报告的问题肯定是Re

ruby - 如何使用正则表达式转换 Markdown 样式的链接?

我正在尝试编写一个正则表达式来替换markdown样式的链接,但它似乎不起作用。这是我目前所拥有的:#rubycode:text="[linkmeup](http://www.example.com)"text.gsub!(%r{\[(\+)\]\((\+)\)}x,%{\\2})我做错了什么? 最佳答案 irb(main):001:0>text="[linkmeup](http://www.example.com)"irb(main):002:0>text.gsub/\[([^\]]+)\]\(([^)]+)\)/,'\1'#=>

ruby - 正则表达式匹配日期

我想匹配格式为mm/dd/yy或mm/dd/yyyy的日期,但它不应选择23/09/2010,其中月份为23,这是无效的,也不应选择无效日期,如00/12/2020或12/00/2011. 最佳答案 比疯狂的巨大Regex更好(假设这是为了验证而不是扫描):require'date'defvalid_date?(str,format="%m/%d/%Y")Date.strptime(str,format)rescuefalseend除了社论:Eww!为什么要使用如此糟糕的日期格式?选择ISO8601,YYYY-MM-DD,这是一个有

ruby 正则表达式 : replace non-word chars that are not space chars

如何替换所有也不是空格字符(\s)的非单词字符(\W)?这是所需的功能:"the(quick)!brown\nfox".gsub(regex,"#")=>“#quick##brown\nfox” 最佳答案 "the(quick)!brown\nfox".gsub(/[^\w\s]/,"#")通过使正则表达式替换任何不是单词字符或空格字符的内容。 关于ruby正则表达式:replacenon-wordcharsthatarenotspacechars,我们在StackOverflow上找到