Being quite simple, these regexes are generally used to solve routine problems every Perl programmer meet.
But there are some tasks, which require regular expressions of much more complexity.
I want to make a list of complicated (obfuscated, odd etc.) regular expressions used to solve diffucult real problems (and then i plan to make it availible online somewhere outside this thread :) ). I will be very obliged if you post here examples of your most interesting regexes combined with chunks of data they were intended to match against.
My own favourite (it is combined from two regexes, one of which is recursive):
Of course, i didn't type the second regex myself; it is generated by my substructure search engine for the Bacterial Carbohydrate Structure Database as a response to a usual request. That's why i used the word "created" instead of "wrote" in the title — some interesting regexes are never typed, but are used intensively :)$brackets_pattern = qr{ # recursive pattern to search brackets lik +e [mmm[ hh[f]]ll] \[ (?: (?>[^\[\]]+ ) # non-brackets | (??{$brackets_pattern}) #new pattern for inside brackets )* \] }x; my $pat = qr/(?-xism:(?-xism:[ab?x][DLSRX?]Glc(?:[pfa?]|-ol|)N\(1\-4\) +)(?x-ism:\[(?:(?>[^\[\]]+)|(??{$brackets_pattern}))*\])*(?x-ism:\[(?: +(?>[^\[\]]+)|(??{$brackets_pattern}))*\])*\[(?x-ism:(?:(?>[^\[\]]+?)| +(??{$brackets_pattern}))*)(?:t\)|(?<![\])]))(?x-ism:\[(?:(?>[^\[\]]+) +|(??{$brackets_pattern}))*\])*(?-xism:[ab?x][DLSRX?]Glcp\(1\-6\))\](? +x-ism:\[(?:(?>[^\[\]]+)|(??{$brackets_pattern}))*\])*(?-xism:[ab?x][D +LSRX?]GalpN(?=\(|$)))/;
-6)[xR3HOBut(1-3)]aDGlcpN(1-4)[aDGlcp(1-6),Ac(1-2)]aDGalpN(1-3)[Ac(1-2 +)]bDGalpN(1-2)aDGlcp(1-P-
I hope to see yor examples described in the way i described mine :)
UPDATE:
Short list of the IMHO best ones i found in replies (ordered by time the comment was posted):
by Hue-Bond([^e]|e([^s]|s([^\.]|\.([^c]|c([^o]|o([^m]|m([^p]|p([^\.]|\.([^o]|o([^ +s]|s([^\.]|\.([^l]|l([^i]|i([^n]|n([^u]|u[^x])))))))))))))))
by !1 The regex (be stricter, this mix of regex and perl code ;)) in the heart of this short script finds all triangles for this quest and puts them all in the %x hash.#!/usr/bin/perl -l "AB~ACFI~ADGJ~AE~BCDE~BFHJ~BI~EGHI~EJ~IJ" =~ /([^~])[^~]*([^~]).*~[^~] +*([^~])[^~]*([^~])(?{local$z=$1 and local$y=$2 and local$x=$1 eq$3?$4 +:$1 eq$4?$3:($z=$2)&&($y=$1)&&$2 eq$3?$4:$2 eq$4?$3:0}).*~[^~]*((??{$ +y})[^~]*(??{$x})|(??{$x})[^~]*(??{$y}))(?{$x{join" - ",sort$x,$y,$z}+ ++})(?!)/; print for sort(keys %x), keys(%x) . " triangles found";
m< (?:http://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\. )*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+) ){3}))(?::(?:\d+))?)(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F \d]{2}))|[;:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{ 2}))|[;:@&=])*))*)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{ 2}))|[;:@&=])*))?)?)|(?:ftp://(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(? :%[a-fA-F\d]{2}))|[;?&=])*)(?::(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a- fA-F\d]{2}))|[;?&=])*))?@)?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|- )*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(? :\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?))(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+! *'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'() ,]|(?:%[a-fA-F\d]{2}))|[?:@&=])*))*)(?:;type=[AIDaid])?)?)|(?:news:(?: (?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;/?:&=])+@(?:(?:( ?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[ a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3})))|(?:[a-zA-Z]( ?:[a-zA-Z\d]|[_.+-])*)|\*))|(?:nntp://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[ a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d ])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)/(?:[a-zA-Z](?:[a-zA-Z \d]|[_.+-])*)(?:/(?:\d+))?)|(?:telnet://(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+ !*'(),]|(?:%[a-fA-F\d]{2}))|[;?&=])*)(?::(?:(?:(?:[a-zA-Z\d$\-_.+!*'() ,]|(?:%[a-fA-F\d]{2}))|[;?&=])*))?@)?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a -zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d] )?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?))/?)|(?:gopher://(?:(?: (?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?: (?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+ ))?)(?:/(?:[a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))(?:(?:(?:[ a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))*)(?:%09(?:(?:(?:[a-zA -Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*)(?:%09(?:(?:[a-zA-Z\d$ \-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))*))?)?)?)?)|(?:wais://(?:(?:(?: (?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?: [a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))? )/(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)(?:(?:/(?:(?:[a-zA -Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)/(?:(?:[a-zA-Z\d$\-_.+!*'(),]|( ?:%[a-fA-F\d]{2}))*))|\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d] {2}))|[;:@&=])*))?)|(?:mailto:(?:(?:[a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:% [a-fA-F\d]{2}))+))|(?:file://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d] |-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?: (?:\d+)(?:\.(?:\d+)){3}))|localhost)?/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'() ,]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|( ?:%[a-fA-F\d]{2}))|[?:@&=])*))*))|(?:prospero://(?:(?:(?:(?:(?:[a-zA-Z \d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-) *[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)/(?:(?:(?:(? :[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a- zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*))*)(?:(?:;(?:(?:(?:[ a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&])*)=(?:(?:(?:[a-zA-Z\d $\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&])*)))*)|(?:ldap://(?:(?:(?:(?: (?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?: [a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))? ))?/(?:(?:(?:(?:(?:(?:(?:[a-zA-Z\d]|%(?:3\d|[46][a-fA-F\d]|[57][Aa\d]) )|(?:%20))+|(?:OID|oid)\.(?:(?:\d+)(?:\.(?:\d+))*))(?:(?:%0[Aa])?(?:%2 0)*)=(?:(?:%0[Aa])?(?:%20)*))?(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F \d]{2}))*))(?:(?:(?:%0[Aa])?(?:%20)*)\+(?:(?:%0[Aa])?(?:%20)*)(?:(?:(? :(?:(?:[a-zA-Z\d]|%(?:3\d|[46][a-fA-F\d]|[57][Aa\d]))|(?:%20))+|(?:OID |oid)\.(?:(?:\d+)(?:\.(?:\d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa]) ?(?:%20)*))?(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)))*)(?:( ?:(?:(?:%0[Aa])?(?:%20)*)(?:[;,])(?:(?:%0[Aa])?(?:%20)*))(?:(?:(?:(?:( ?:(?:[a-zA-Z\d]|%(?:3\d|[46][a-fA-F\d]|[57][Aa\d]))|(?:%20))+|(?:OID|o id)\.(?:(?:\d+)(?:\.(?:\d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa])?( ?:%20)*))?(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*))(?:(?:(?: %0[Aa])?(?:%20)*)\+(?:(?:%0[Aa])?(?:%20)*)(?:(?:(?:(?:(?:[a-zA-Z\d]|%( ?:3\d|[46][a-fA-F\d]|[57][Aa\d]))|(?:%20))+|(?:OID|oid)\.(?:(?:\d+)(?: \.(?:\d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa])?(?:%20)*))?(?:(?:[a -zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)))*))*(?:(?:(?:%0[Aa])?(?:%2 0)*)(?:[;,])(?:(?:%0[Aa])?(?:%20)*))?)(?:\?(?:(?:(?:(?:[a-zA-Z\d$\-_.+ !*'(),]|(?:%[a-fA-F\d]{2}))+)(?:,(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-f A-F\d]{2}))+))*)?)(?:\?(?:base|one|sub)(?:\?(?:((?:[a-zA-Z\d$\-_.+!*'( ),;/?:@&=]|(?:%[a-fA-F\d]{2}))+)))?)?)?)|(?:(?:z39\.50[rs])://(?:(?:(? :(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(? :[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+)) ?)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))+)(?:\+(?:(?: [a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))+))*(?:\?(?:(?:[a-zA-Z\d$\-_ .+!*'(),]|(?:%[a-fA-F\d]{2}))+))?)?(?:;esn=(?:(?:[a-zA-Z\d$\-_.+!*'(), ]|(?:%[a-fA-F\d]{2}))+))?(?:;rs=(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA -F\d]{2}))+)(?:\+(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))+))*) ?))|(?:cid:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?:@&= ])*))|(?:mid:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?:@ &=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?:@&=] )*))?)|(?:vemmi://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z \d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\ .(?:\d+)){3}))(?::(?:\d+))?)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a -fA-F\d]{2}))|[/?:@&=])*)(?:(?:;(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a -fA-F\d]{2}))|[/?:@&])*)=(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d ]{2}))|[/?:@&])*))*))?)|(?:imap://(?:(?:(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+ !*'(),]|(?:%[a-fA-F\d]{2}))|[&=~])+)(?:(?:;[Aa][Uu][Tt][Hh]=(?:\*|(?:( ?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~])+))))?)|(?:(?:;[ Aa][Uu][Tt][Hh]=(?:\*|(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2 }))|[&=~])+)))(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[ &=~])+))?))@)?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d]) ?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?: \d+)){3}))(?::(?:\d+))?))/(?:(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?: %[a-fA-F\d]{2}))|[&=~:@/])+)?;[Tt][Yy][Pp][Ee]=(?:[Ll](?:[Ii][Ss][Tt]| [Ss][Uu][Bb])))|(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2})) |[&=~:@/])+)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[ &=~:@/])+))?(?:(?:;[Uu][Ii][Dd][Vv][Aa][Ll][Ii][Dd][Ii][Tt][Yy]=(?:[1- 9]\d*)))?)|(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~ :@/])+)(?:(?:;[Uu][Ii][Dd][Vv][Aa][Ll][Ii][Dd][Ii][Tt][Yy]=(?:[1-9]\d* )))?(?:/;[Uu][Ii][Dd]=(?:[1-9]\d*))(?:(?:/;[Ss][Ee][Cc][Tt][Ii][Oo][Nn ]=(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~:@/])+)))?)) )?)|(?:nfs:(?:(?://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA- Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?: \.(?:\d+)){3}))(?::(?:\d+))?)(?:(?:/(?:(?:(?:(?:(?:[a-zA-Z\d\$\-_.!~*' (),])|(?:%[a-fA-F\d]{2})|[:@&=+])*)(?:/(?:(?:(?:[a-zA-Z\d\$\-_.!~*'(), ])|(?:%[a-fA-F\d]{2})|[:@&=+])*))*)?)))?)|(?:/(?:(?:(?:(?:(?:[a-zA-Z\d \$\-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*)(?:/(?:(?:(?:[a-zA-Z\d\$\ -_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*))*)?))|(?:(?:(?:(?:(?:[a-zA- Z\d\$\-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*)(?:/(?:(?:(?:[a-zA-Z\d \$\-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*))*)?))) >x;
sub valid { my $spot = substr($grid_h, $_[0]*$size+$_[1], 1); return 1 if $spot eq $_[2]; return if $spot ne '_'; return if index(substr($grid_h, $_[0] * $size, $size), $_[2]) >= 0; return if index(substr($grid_v, $_[1] * $size, $size), $_[2]) >= 0; return 1; } $re = qr/ (?: (?(?{ !valid(0, 0, '1') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 0, 1, '1'); local $grid_v = $grid_v; substr($grid_v, 0, 1, '1') +; }) | (?(?{ !valid(0, 0, '2') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 0, 1, '2'); local $grid_v = $grid_v; substr($grid_v, 0, 1, '2') +; }) | (?(?{ !valid(0, 0, '3') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 0, 1, '3'); local $grid_v = $grid_v; substr($grid_v, 0, 1, '3') +; }) | (?(?{ !valid(0, 0, '4') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 0, 1, '4'); local $grid_v = $grid_v; substr($grid_v, 0, 1, '4') +; }) | (?(?{ !valid(0, 0, '5') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 0, 1, '5'); local $grid_v = $grid_v; substr($grid_v, 0, 1, '5') +; }) | (?(?{ !valid(0, 0, '6') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 0, 1, '6'); local $grid_v = $grid_v; substr($grid_v, 0, 1, '6') +; }) | (?(?{ !valid(0, 0, '7') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 0, 1, '7'); local $grid_v = $grid_v; substr($grid_v, 0, 1, '7') +; }) | (?(?{ !valid(0, 0, '8') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 0, 1, '8'); local $grid_v = $grid_v; substr($grid_v, 0, 1, '8') +; }) | (?(?{ !valid(0, 0, '9') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 0, 1, '9'); local $grid_v = $grid_v; substr($grid_v, 0, 1, '9') +; }) ) (?: (?(?{ !valid(0, 1, '1') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 1, 1, '1'); local $grid_v = $grid_v; substr($grid_v, 9, 1, '1') +; }) | (?(?{ !valid(0, 1, '2') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 1, 1, '2'); local $grid_v = $grid_v; substr($grid_v, 9, 1, '2') +; }) | (?(?{ !valid(0, 1, '3') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 1, 1, '3'); local $grid_v = $grid_v; substr($grid_v, 9, 1, '3') +; }) | (?(?{ !valid(0, 1, '4') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 1, 1, '4'); local $grid_v = $grid_v; substr($grid_v, 9, 1, '4') +; }) | (?(?{ !valid(0, 1, '5') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 1, 1, '5'); local $grid_v = $grid_v; substr($grid_v, 9, 1, '5') +; }) | (?(?{ !valid(0, 1, '6') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 1, 1, '6'); local $grid_v = $grid_v; substr($grid_v, 9, 1, '6') +; }) | (?(?{ !valid(0, 1, '7') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 1, 1, '7'); local $grid_v = $grid_v; substr($grid_v, 9, 1, '7') +; }) | (?(?{ !valid(0, 1, '8') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 1, 1, '8'); local $grid_v = $grid_v; substr($grid_v, 9, 1, '8') +; }) | (?(?{ !valid(0, 1, '9') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 1, 1, '9'); local $grid_v = $grid_v; substr($grid_v, 9, 1, '9') +; }) ) (?: (?(?{ !valid(0, 2, '1') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 2, 1, '1'); local $grid_v = $grid_v; substr($grid_v, 18, 1, '1' +); }) | (?(?{ !valid(0, 2, '2') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 2, 1, '2'); local $grid_v = $grid_v; substr($grid_v, 18, 1, '2' +); }) | (?(?{ !valid(0, 2, '3') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 2, 1, '3'); local $grid_v = $grid_v; substr($grid_v, 18, 1, '3' +); }) | (?(?{ !valid(0, 2, '4') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 2, 1, '4'); local $grid_v = $grid_v; substr($grid_v, 18, 1, '4' +); }) | (?(?{ !valid(0, 2, '5') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 2, 1, '5'); local $grid_v = $grid_v; substr($grid_v, 18, 1, '5' +); }) | (?(?{ !valid(0, 2, '6') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 2, 1, '6'); local $grid_v = $grid_v; substr($grid_v, 18, 1, '6' +); }) | (?(?{ !valid(0, 2, '7') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 2, 1, '7'); local $grid_v = $grid_v; substr($grid_v, 18, 1, '7' +); }) | (?(?{ !valid(0, 2, '8') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 2, 1, '8'); local $grid_v = $grid_v; substr($grid_v, 18, 1, '8' +); }) | (?(?{ !valid(0, 2, '9') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 2, 1, '9'); local $grid_v = $grid_v; substr($grid_v, 18, 1, '9' +); }) ) . . . (?: (?(?{ !valid(8, 6, '1') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 78, 1, '1'); local $grid_v = $grid_v; substr($grid_v, 62, 1, '1 +'); }) | (?(?{ !valid(8, 6, '2') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 78, 1, '2'); local $grid_v = $grid_v; substr($grid_v, 62, 1, '2 +'); }) | (?(?{ !valid(8, 6, '3') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 78, 1, '3'); local $grid_v = $grid_v; substr($grid_v, 62, 1, '3 +'); }) | (?(?{ !valid(8, 6, '4') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 78, 1, '4'); local $grid_v = $grid_v; substr($grid_v, 62, 1, '4 +'); }) | (?(?{ !valid(8, 6, '5') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 78, 1, '5'); local $grid_v = $grid_v; substr($grid_v, 62, 1, '5 +'); }) | (?(?{ !valid(8, 6, '6') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 78, 1, '6'); local $grid_v = $grid_v; substr($grid_v, 62, 1, '6 +'); }) | (?(?{ !valid(8, 6, '7') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 78, 1, '7'); local $grid_v = $grid_v; substr($grid_v, 62, 1, '7 +'); }) | (?(?{ !valid(8, 6, '8') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 78, 1, '8'); local $grid_v = $grid_v; substr($grid_v, 62, 1, '8 +'); }) | (?(?{ !valid(8, 6, '9') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 78, 1, '9'); local $grid_v = $grid_v; substr($grid_v, 62, 1, '9 +'); }) ) (?: (?(?{ !valid(8, 7, '1') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 79, 1, '1'); local $grid_v = $grid_v; substr($grid_v, 71, 1, '1 +'); }) | (?(?{ !valid(8, 7, '2') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 79, 1, '2'); local $grid_v = $grid_v; substr($grid_v, 71, 1, '2 +'); }) | (?(?{ !valid(8, 7, '3') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 79, 1, '3'); local $grid_v = $grid_v; substr($grid_v, 71, 1, '3 +'); }) | (?(?{ !valid(8, 7, '4') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 79, 1, '4'); local $grid_v = $grid_v; substr($grid_v, 71, 1, '4 +'); }) | (?(?{ !valid(8, 7, '5') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 79, 1, '5'); local $grid_v = $grid_v; substr($grid_v, 71, 1, '5 +'); }) | (?(?{ !valid(8, 7, '6') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 79, 1, '6'); local $grid_v = $grid_v; substr($grid_v, 71, 1, '6 +'); }) | (?(?{ !valid(8, 7, '7') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 79, 1, '7'); local $grid_v = $grid_v; substr($grid_v, 71, 1, '7 +'); }) | (?(?{ !valid(8, 7, '8') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 79, 1, '8'); local $grid_v = $grid_v; substr($grid_v, 71, 1, '8 +'); }) | (?(?{ !valid(8, 7, '9') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 79, 1, '9'); local $grid_v = $grid_v; substr($grid_v, 71, 1, '9 +'); }) ) (?: (?(?{ !valid(8, 8, '1') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 80, 1, '1'); local $grid_v = $grid_v; substr($grid_v, 80, 1, '1 +'); }) | (?(?{ !valid(8, 8, '2') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 80, 1, '2'); local $grid_v = $grid_v; substr($grid_v, 80, 1, '2 +'); }) | (?(?{ !valid(8, 8, '3') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 80, 1, '3'); local $grid_v = $grid_v; substr($grid_v, 80, 1, '3 +'); }) | (?(?{ !valid(8, 8, '4') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 80, 1, '4'); local $grid_v = $grid_v; substr($grid_v, 80, 1, '4 +'); }) | (?(?{ !valid(8, 8, '5') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 80, 1, '5'); local $grid_v = $grid_v; substr($grid_v, 80, 1, '5 +'); }) | (?(?{ !valid(8, 8, '6') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 80, 1, '6'); local $grid_v = $grid_v; substr($grid_v, 80, 1, '6 +'); }) | (?(?{ !valid(8, 8, '7') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 80, 1, '7'); local $grid_v = $grid_v; substr($grid_v, 80, 1, '7 +'); }) | (?(?{ !valid(8, 8, '8') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 80, 1, '8'); local $grid_v = $grid_v; substr($grid_v, 80, 1, '8 +'); }) | (?(?{ !valid(8, 8, '9') })x)(?{ local $grid_h = $grid_h; substr($gr +id_h, 80, 1, '9'); local $grid_v = $grid_v; substr($grid_v, 80, 1, '9 +'); }) ) (?{ $match_grid = $grid_h }) /x;
|
---|