如何在ruby中给定两个字符串之间打印字符串?

时间:2017-03-19 15:42:08

标签: ruby regex string

我有一个字符串(多行),我需要获取2个给定字符串之间的字符串。

例如:

multiline_string = %q{testtestbegin
test1
test2
test3
end
test
xxx
xxx
begin
yyy
yyy
end
hhh
}

我需要找到'begin'和'end'之间的字符串。有2场比赛。我需要打印这两个。 有没有办法在像(?<=begin)(.*)(?=end)这样的正则表达式中执行此操作 请帮助。

2 个答案:

答案 0 :(得分:7)

r = /
    (?<=begin\n) # match 'begin' followed by a newline in a positive lookbehind
    .*?          # match any number of any character, lazily
    (?=end\n)    # match 'end' follwed by a newline in a positive lookahead
    /mx          # multiline and free-spacing regex definition modes

arr = multiline_string.scan(r)
  #=> ["test1\ntest2\ntest3\n", "yyy\nyyy\n"] 
arr.each { |s| puts s }
test1
test2
test3
yyy
yyy

答案 1 :(得分:1)

只是为了好玩:

text = 'testtestbegin
test1
test2
test3
end
test
xxx
xxx
begin
yyy
yyy
end
hhh
'

p text.split(/(begin|end)/)
      .each_cons(3)
      .select do |a, _, c|
         a == 'begin' && c == 'end'
      end.map { |_, w, _| w }
# ["\ntest1\ntest2\ntest3\n", "\nyyy\nyyy\n"]