使用Ruby

时间:2016-05-19 01:24:14

标签: ruby-on-rails ruby orm

我有一个来自地图的变量,我试图在方括号之间得到一个特定的部分

  

(例如 “dmfkdmfk [IWANTTHISPART] mlkm”)

但它不像我那样工作。我正在尝试使用here

原始代码:

query_values = activities.map do |activity|
  '(' +
  "#{activity['note']}"
  +')'

end

我试过了:

query_values = activities.map do |activity|
  '(' +
  "#{activity['note'].[/#{"["}(.*?)#{"]"}/m, 1]}" 
  +')'

end

错误日志:

syntax error, unexpected '[', expecting '('
      '(' + "#{activity['note'].[/#{"["}(.*?)#{"]"}/m, 1]},""'" +')'
                                 ^
quase.rb:40: syntax error, unexpected keyword_end, expecting tSTRING_DEND

我该怎么办? 非常感谢。

4 个答案:

答案 0 :(得分:6)

str = "(dmfkdmfk[IWANTTHISPART]mlkm)"

#1使用带有外观的正则表达式

R0 = /
     (?<=\[) # match a left bracket in a positive lookbehind
     .+      # match one or more of any character
     (?=\])  # match a right bracket in a positive lookahead
     /x      # free-spacing regex definition mode

(与R0 = /(?<=\[).+(?=\])/相同)

str[R0] #=> "IWANTTHISPART"

#2左侧或右侧括号中的分割字符串

R1 = /
     [\[\]] # match a left or right bracket
     /x

(与R1 = /[\[\]]/相同)

str.split(R1)[1]
  #=> "IWANTTHISPART"

#3没有正则表达式

str[str.index('[')+1..str.index(']')-1]
  #=> "IWANTTHISPART"

答案 1 :(得分:2)

在语法 - 糖形式中使用[]时,接收器之后不能有一段时间。以下是不合语法的:

string.[regex, parameter]

使用普通方法调用表单:

string.[](regex, parameter)

或语法 - 糖形式:

string[regex, parameter]

答案 2 :(得分:1)

/\[(.*)\]/.match( "dmfkdmfk[IWANTTHISPART]mlkm" )[1]
=> "IWANTTHISPART"                                                  

答案 3 :(得分:1)

您可以将{{3}}与正则表达式一起使用:

> a = "dmfkdmfk[IWANTTHISPART]mlkm"
> a[/\[.*?\]/][1..-2]
#=> "IWANTTHISPART"