fork(1) download
  1. require 'strscan'
  2. scanner = StringScanner.new('r|abc| ')
  3.  
  4. puts "pre-regex: #{scanner.inspect}"
  5. puts "got a char: #{scanner.getch} (res: #{scanner.inspect})"
  6. divider = scanner.getch
  7. puts "got divider: #{divider.inspect}"
  8. puts "mid-regex: #{scanner.inspect}"
  9. # this bit still fails even if you replace `#{divider}' with `|'
  10. res = scanner.scan_until(/(?<![^\\]\\)#{divider}[a-z]*/)
  11. puts "post-regex: #{scanner.inspect}"
  12.  
  13. if scanner.skip(/\s+/)# || scanner.skip(/;-.*?-;/m)
  14. puts "Success! #{res}"
  15. else
  16. puts "Fail. Ended at: #{scanner.inspect}"
  17. puts "(res was #{res.inspect})"
  18. end
Success #stdin #stdout 0.05s 9768KB
stdin
Standard input is empty
stdout
pre-regex: #<StringScanner 0/8 @ "r|abc...">
got a char: r (res: #<StringScanner 1/8 "r" @ "|abc|...">)
got divider: "|"
mid-regex: #<StringScanner 2/8 "r|" @ "abc| ...">
post-regex: #<StringScanner 2/8 "r|" @ "abc| ...">
Fail. Ended at: #<StringScanner 2/8 "r|" @ "abc| ...">
(res was "")