First of all sorry if this a duplicate question ( I have scanned through
the last answers regarding regex and didn’t get any ideas ).
I am scanning a string in order to detect correctly formed “records” in
it.
A correct record is a “SP” mark followed by “NL” marks (0 or more ) and
an
ending “EP” mark.
If we find an two EPs without a SP in the middle, two SPs without a EP
in
the middle, or a mark other than “NL” in between the SP and EP marks the
record is invalid.
“BS HD SP SP EP SP NL EP EP FT BS”
We have the following records:
SP EP
SP NL EP
I scan through them and I am able to retrieve them with:
string.scan(/(SP)\s((?:NL\s)*)(EP)/)
But I am not getting the start and end position of the match inside the
string ( which I need to retrive data from another place).
Is there any way to scan the string for matches where I get the index
possition ?
The MatchData object in $~ has an “offset” method to retrieve the start
end end offset a capture group. However, I don’t understand why you
capture “SP” and “EP”.
string.scan /SP\s((?:NL\s)*)EP/ do
p $~.offset 1
end