рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рдиреБрд╕реНрдЦрд╛ рдЬреЛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗрддрд╛
рд╣реИ ,
рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд
рд╣реИ , рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд▓рд╛рдЗрд╡ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рд╛, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рд╕рд┐рд╕реНрдЯрдо (рдУрдкрдирдЗрдВрдбрд┐рдпрд╛рдирд╛) рдХреЗ рддрд╣рдд рдХреЛрдИ рдЧреЛ рднрд╛рд╖рд╛ рд╕рдВрдХрд▓рдХ рдирд╣реАрдВ рд╣реИред рддреЛ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рднрд╛рд╖рд╛ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рд╣реБрдЖ рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рдордВрдЪ рдкрд░ рдореМрдЬреВрдж рд╣реИ - рдкрд░реНрд▓ред
рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдореИрдВ рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЖрдк рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ-рджреЛ рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреНрд╡рд░рд┐рдд рдФрд░ рдХреБрд╢рд▓ рдЦреЛрдЬ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рднрд╡рд┐рд╖реНрдп рдХреЗ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдПрдХ рднрд╛рдЧ рдореЗрдВ рджрд┐рдП рдЧрдП рд╕рдВрдХреЗрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
$hints =~ s/(.)/$1\.\*\?/g;
рдпрд╣рд╛рдБ $ рд╕рдВрдХреЗрдд рд╕рднреА рд╕рдВрдХреЗрддреЛрдВ рд╕реЗ рд╕рдЬреНрдЬрд┐рдд рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 'рдПрдмреАрд╕реА'ред
рдЦреЛрдЬ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (ред) рдПрдХ рдПрдХрд▓ рд╡рд░реНрдг рд╣реИ (рдкреНрд░рддреНрдпреЗрдХ, рдЦреЛрдЬ рдкреИрд░рд╛рдореАрдЯрд░ 'g' рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ ($ 1 рдЦреЛрдЬ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкрд╣рд▓реЗ рдХреЛрд╖реНрдардХ рд╕реЗ рдореВрд▓реНрдп рд╣реИ) рдФрд░ рдЙрди рднрд╛рдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдг рдХреЗ рдмрд╛рдж, рдПрдХ рдмреНрд▓реЙрдХ рдЬреЛрдбрд╝реЗрдВ: 'ред *?', рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ: рдХреЛрдИ рднреА рд╡рд░реНрдг, рд╢реВрдиреНрдп рдпрд╛ рдЕрдзрд┐рдХ рдмрд╛рд░, рдФрд░ рдПрдХ рдорд╛рд░реНрдХрд░ рдЬреЛ рд╕рдВрд╢реЛрдзрдХ рдХреЛ "рд▓рд╛рд▓рдЪреА рдирд╣реАрдВ" рдмрдирд╛рддрд╛ рд╣реИ (рдиреАрдЪреЗ рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ)ред
рдХреБрд▓ рдЙрддреНрдкрд╛рджрди рд▓рд╛рдЗрди рд╣реИ: 'рдПред *? рдмреА *? рд╕реА *? рдбреА *?'
рд╣рдо рдореБрдЦреНрдп рднрд╛рдЧ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде "рдкрд░рд┐рдЪрд┐рдд" рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ, рд╢рд░реНрдд:
if ($path =~ /^(.*)($hints)$/)
рдпрд╣рд╛рдБ рдкреНрд░рддреАрдХ '^' рд░реЗрдЦрд╛ рдХреА рд╢реБрд░реБрдЖрдд рдХрд╛ "рдПрдВрдХрд░" рд╣реИ, рдкрд╣рд▓реЗ рдХреЛрд╖реНрдардХ рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ '(ред *)' рд░реЗрдЦрд╛ рдЙрдкрд╕рд░реНрдЧ рд╣реИ, рдФрд░ рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрд╛рдж - рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рд╡рд╛рд▓реЗ рд╣рдорд╛рд░реЗ рдкреВрд░реНрд╡-рддреИрдпрд╛рд░ rexxp, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рджреВрд╕рд░реЗ "рдПрдВрдХрд░" рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИред '$', рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
рдЪреВрдБрдХрд┐ рдкрд╣рд▓реЗ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд▓рд╛рдЗрди рдореЗрдВ рд╕рднреА рд╕рдВрд╢реЛрдзрдХ '*' рдореЗрдВ рдорд╛рд░реНрдХрд░ рд╣реЛрддреЗ рд╣реИрдВ? '', рдЗрд╕ рдорд╛рд░реНрдХрд░ рдХреЗ рдмрд┐рдирд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдВрд╢реЛрдзрдХ "рд▓рд╛рд▓рдЪреА" рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд▓рд╛рдЗрди рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ: /^(.*)(a.*?b.*?c.*?d.*?)$/
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЦреЛрдЬ рджрд╛рдИрдВ рд╕реЗ рдмрд╛рдИрдВ рдУрд░ рдХреА рдЬрд╛рддреА рд╣реИ, рдЕрд░реНрдерд╛рдд рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рд╕реЗ, рдирд┐рдХрдЯрддрдо рд╡рд░реНрдг 'd' рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВ, рдлрд┐рд░ рдЙрд╕рдХреЗ рдмрд╛рдИрдВ рдУрд░, рдирд┐рдХрдЯрддрдо рд╡рд░реНрдг 'c', рдлрд┐рд░ рдирд┐рдХрдЯрддрдо рд╡рд░реНрдг 'b' рдЗрд╕рдХреЗ рдмрд╛рдИрдВ рдУрд░ рдФрд░ рдлрд┐рд░ рдирд┐рдХрдЯрддрдо рд╡рд░реНрдг 'a' рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╡рд╣ рд╕рдм рд╡рд░реНрдг рдХреЗ рдмрд╛рдИрдВ рдУрд░ рд╣реЛрдЧрд╛ред 'рдП' "рд▓рд╛рд▓рдЪреА" рдЙрдкрд╕рд░реНрдЧ рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛ред рд▓рд╛рдЗрди рдореЗрдВ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рдгрд╛рдо рдХреА рд╕реНрдерд┐рддрд┐ рд╣рдо рдЗрд╕ рдЙрдкрд╕рд░реНрдЧ рдХреА рд▓рдВрдмрд╛рдИ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рддреН рд▓рд╛рдЗрди
$w = length($1);
(рдпрд╣рд╛рдБ $ 1 рдХреЛ рдкрд┐рдЫрд▓реЗ regexp рдХреЗ рдкрд╣рд▓реЗ рдХреЛрд╖реНрдардХ рд╕реЗ рдореВрд▓реНрдп рдорд┐рд▓реЗрдЧрд╛), рдмрд╛рдХреА рдХреА рд╕реНрдерд┐рддрд┐рдпрд╛рдБ (рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рджрд╛рдИрдВ рдУрд░, рдмреЗрд╣рддрд░) рд╣рдорд╛рд░реЗ рд▓рд┐рдП rexxp рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╣реА рдкреВрд░реА рдХреА рдЬрд╛ рдЪреБрдХреА рд╣реИрдВред
рдпрд╣ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдп рд▓реЛрдбрдкрде рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред
рдкреВрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
hg рдХреНрд▓реЛрди
bitbucket.org/eugenet/perlre