How would I return the string between two string markers of a string in Ruby?
For example I have:
input_string
str1_markerstring
str2_markerstring
Want to do something like:
input_string.string_between_markers(str1_markerstring, str2_markerString)
Example text:
s # => "Charges for the period 2012-01-28 00:00:00 to 2012-02-27 23:59:59:<br>\nAny Network Cap remaining: $366.550<br>International Cap remaining: $0.000" str1_markerstring # => "Charges for the period" str2_markerstring # => "Any Network Cap" s[/#{str1_markerstring}(.*?)#{str2_markerstring}/, 1] # => nil # IE DIDN'T WORK IN THIS CASE
Using Ruby 1.9.3.
There is no substring method in Ruby, and hence we rely upon ranges and expressions. If we want to use the range, we have to use periods between the starting and ending index of the substring to get a new substring from the main string.
Two strings or boolean values, are equal if they both have the same length and value. In Ruby, we can use the double equality sign == to check if two strings are equal or not. If they both have the same length and content, a boolean value True is returned. Otherwise, a Boolean value False is returned.
=~ is Ruby's pattern-matching operator. It matches a regular expression on the left to a string on the right. If a match is found, the index of first match in string is returned. If the string cannot be found, nil will be returned.
input_string = "blahblahblahSTARTfoofoofooENDwowowowowo" str1_markerstring = "START" str2_markerstring = "END" input_string[/#{str1_markerstring}(.*?)#{str2_markerstring}/m, 1] #=> "foofoofoo"
or to put it in a method:
class String def string_between_markers marker1, marker2 self[/#{Regexp.escape(marker1)}(.*?)#{Regexp.escape(marker2)}/m, 1] end end "blahblahblahSTARTfoofoofooENDwowowowowo".string_between_markers("START", "END") #=> "foofoofoo"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With