require 'strscan'
scanner = StringScanner.new('r|abc| ')
puts "pre-regex: #{scanner.inspect}"
puts "got a char: #{scanner.getch} (res: #{scanner.inspect})"
divider = scanner.getch
puts "got divider: #{divider.inspect}"
puts "mid-regex: #{scanner.inspect}"
# this bit still fails even if you replace `#{divider}' with `|'
res = scanner.scan_until(/(?<![^\\]\\)#{divider}[a-z]*/)
puts "post-regex: #{scanner.inspect}"
if scanner.skip(/\s+/)# || scanner.skip(/;-.*?-;/m)
puts "Success! #{res}"
else
puts "Fail. Ended at: #{scanner.inspect}"
puts "(res was #{res.inspect})"
end
cmVxdWlyZSAnc3Ryc2NhbicKc2Nhbm5lciA9IFN0cmluZ1NjYW5uZXIubmV3KCdyfGFiY3wgICcpCgpwdXRzICJwcmUtcmVnZXg6ICN7c2Nhbm5lci5pbnNwZWN0fSIKcHV0cyAiZ290IGEgY2hhcjogI3tzY2FubmVyLmdldGNofSAocmVzOiAje3NjYW5uZXIuaW5zcGVjdH0pIgpkaXZpZGVyID0gc2Nhbm5lci5nZXRjaApwdXRzICJnb3QgZGl2aWRlcjogI3tkaXZpZGVyLmluc3BlY3R9IgpwdXRzICJtaWQtcmVnZXg6ICN7c2Nhbm5lci5pbnNwZWN0fSIKIyB0aGlzIGJpdCBzdGlsbCBmYWlscyBldmVuIGlmIHlvdSByZXBsYWNlIGAje2RpdmlkZXJ9JyB3aXRoIGB8JwpyZXMgPSBzY2FubmVyLnNjYW5fdW50aWwoLyg/PCFbXlxcXVxcKSN7ZGl2aWRlcn1bYS16XSovKQpwdXRzICJwb3N0LXJlZ2V4OiAje3NjYW5uZXIuaW5zcGVjdH0iCgppZiBzY2FubmVyLnNraXAoL1xzKy8pIyB8fCBzY2FubmVyLnNraXAoLzstLio/LTsvbSkKICBwdXRzICJTdWNjZXNzISAje3Jlc30iCmVsc2UKICBwdXRzICJGYWlsLiBFbmRlZCBhdDogI3tzY2FubmVyLmluc3BlY3R9IgogIHB1dHMgIihyZXMgd2FzICN7cmVzLmluc3BlY3R9KSIKZW5k