From: ts Date: 2001-06-18T01:19:45+09:00 Subject: [ruby-talk:16567] [TOY] reversed regexp ftp://moulon.inra.fr/pub/ruby/rr.tar.gz It's a toy and *totally* useless but it's normal because it was inpired by a P language :-) It's based on http://www.crusoe.net/~jeffp/sexeger/sexeger.html The principe is to reverse the regexp and run it against the reversed string. For example /(\w{2,})(\d)$/.rmatch "+++++++abc12" is the same than /^(\d)(\w{2,})/.match "21cba+++++++" and with the debugging version (rr don't have debug options) this give pigeon% ruby -rjj -e '/(\w{2,})(\d)$/.rmatch "+++++++abc12"; p $1, $2' Regexp /(\w{2,})(\d)$/.reverse 0 begline 1 start_memory $1 2 charset 0-9 (0) 3 stop_memory $1 4 start_memory $2 5 set_number [9] = 32766 6 set_number [7] = 2 7 must succeed 2 times then on_failure_jump 10 8 wordchar 9 jump 32766 times to 7 10 stop_memory $2 11 end subexpressions : 2 Fastmap supplied : 0-9 String <<21cba+++++++>> pos=0 0 begline |21cba+++++++ | 1 start_memory |21cba+++++++ | 2 charset |21cba+++++++ | 3 stop_memory 2|1cba+++++++ | $1=2 4 start_memory 2|1cba+++++++ | 5 set_number_at 2|1cba+++++++ | 6 set_number_at 2|1cba+++++++ | 7 succeed_n 2|1cba+++++++ | > 8 wordchar 2|1cba+++++++ | 9 jump_n 21|cba+++++++ | 7 succeed_n 21|cba+++++++ | > 8 wordchar 21|cba+++++++ | 9 jump_n 21c|ba+++++++ | 7 succeed_n 21c|ba+++++++ | >10[0] 8 wordchar 21c|ba+++++++ | 9 jump_n 21cb|a+++++++ | 7 succeed_n 21cb|a+++++++ | >10[1] 8 wordchar 21cb|a+++++++ | 9 jump_n 21cba|+++++++ | 7 succeed_n 21cba|+++++++ | >10[2] 8 wordchar 21cba|+++++++ | F10[2] 10 stop_memory 21cba|+++++++ | $2=1cba SUCCESS "2" "abc1" pigeon% If you have, like me, some difficulties to understand how match a regexp, it will be *worst* with a reversed regexp :-) Guy Decoux