in reply to The craziest RegExes you ever created
use strict; sub l { return length shift } sub roman2int { $_ = shift; /(M*)(?{$a+=1000*l$1})(D*)(?:(?!M)(?{$a+=500*l$2})|(?{$a-=500*l$2} +))(C*)(?:(?![MD])(?{$a+=100*l$3})|(?{$a-=100*l$3}))(L*)(?:(?![MDC])(? +{$a+=50*l$4})|(?{$a-=50*l$4}))(X*)(?:(?![MDCL])(?{$a+=10*l$5})|(?{$a- +=10*l$5}))(V*)(?:(?![MDCLX])(?{$a+=5*l$6})|(?{$a-=5*l$6}))(I*)(?:(?![ +MDCLXV])(?{$a+=1*l$7})|(?{$a-=1*l$7}))(M*)(?{$a+=1000*l$8})(D*)(?{$a+ +=500*l$9})(C*)(?:(?![MD])(?{$a+=100*l$10})|(?{$a-=100*l$10}))(L*)(?:( +?![MDC])(?{$a+=50*l$11})|(?{$a-=50*l$11}))(X*)(?:(?![MDCL])(?{$a+=10* +l$12})|(?{$a-=10*l$12}))(V*)(?:(?![MDCLX])(?{$a+=5*l$13})|(?{$a-=5*l$ +13}))(I*)(?:(?![MDCLXV])(?{$a+=1*l$14})|(?{$a-=1*l$14}))(C*)(?{$a+=10 +0*l$15})(L*)(?:(?![MDC])(?{$a+=50*l$16})|(?{$a-=50*l$16}))(X*)(?:(?![ +MDCL])(?{$a+=10*l$17})|(?{$a-=10*l$17}))(V*)(?:(?![MDCLX])(?{$a+=5*l$ +18})|(?{$a-=5*l$18}))(I*)(?:(?![MDCLXV])(?{$a+=1*l$19})|(?{$a-=1*l$19 +}))(L*)(?{$a+=100*l$20})(X*)(?:(?![MDCL])(?{$a+=10*l$21})|(?{$a-=10*l +$21}))(V*)(?:(?![MDCLX])(?{$a+=5*l$22})|(?{$a-=5*l$22}))(I*)(?:(?![MD +CLXV])(?{$a+=1*l$23})|(?{$a-=1*l$23}))(X*)(?{$a+=10*l$24})(V*)(?:(?![ +MDCLX])(?{$a+=5*l$25})|(?{$a-=5*l$25}))(I*)(?:(?![MDCLXV])(?{$a+=1*l$ +26})|(?{$a-=1*l$26}))(X*)(?{$a+=10*l$27})/; return $a; } print roman2int shift;
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: The craziest RegExes you ever created
by Ieronim (Friar) on Jul 04, 2006 at 16:32 UTC | |
by zshzn (Hermit) on Jul 04, 2006 at 22:01 UTC |