PostgreSQL, TCL рдФрд░ рдЕрдиреНрдп: RE рдЗрдВрдЬрди рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддреНрд░реБрдЯрд┐ред рд╕рдВрднрд╡ рднреЗрджреНрдпрддрд╛

рдореИрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдЦреБрдж рд╣реЗрдирд░реА рд╕реНрдкреЗрдВрд╕рд░ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреА рдЧрдИ рдореВрд▓ рд░реВрдк рд╕реЗ рд░рдЧреБрд▓рд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдореЙрдбреНрдпреВрд▓ рдпрд╛ рдПрдирдПрдлрдП рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХреБрдЫ рдЕрдиреНрдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдЯреАрд╕реАрдПрд▓, рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдХреНрдпреВрдПрд▓ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд "рднреЗрджреНрдпрддрд╛" рдХреА рдУрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЖрдк рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕реМ рд╕рдВрд╢реЛрдзрд┐рдд рд╕реНрд░реЛрдд (рдПрдХ рд╣реА рд╕рди рдорд╛рдЗрдХреНрд░реЛрд╕рд┐рд╕реНрдЯрдореНрд╕, рдпреВрдпреВрдПрдирдИрдЯреА, рдЖрджрд┐ рд╕реЗ) рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрдЧ рд╢реБрд░реВ рдореЗрдВ рджреВрд░ рдХреЗ 90 рдХреЗ рджрд╢рдХ рд╕реЗ рдореМрдЬреВрдж рдерд╛, рдЕрдЧрд░ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдореБрдЭреЗ рдХреЛрдб рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЬрд╣рд╛рдВ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╣реЗрдирд░реА рдореЗрдВ рд╣реЛрддреА рд╣реИ, рдЕрдкрдиреЗ рдкреБрд░рд╛рдиреЗ рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ, рдпрд╣ рдЕрднреА рднреА рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред

рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдХ рддреНрд░реБрдЯрд┐: рдпрд╣ рдлрд╝реЙрд░реНрдо рдХреА рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (((((x)*)*)*)*)* рдХреЗ рд╕рдВрдХрд▓рди рдХреЗ рдЪрд░рдг рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдирд┐рд╖реНрдкрд╛рджрди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рди рд╣реИ, рдЕрд░реНрдерд╛рддред рдпрджрд┐ рдирд┐рдпрдорд┐рддрддрд╛ рдХреА рдорд╛рдиреНрдпрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рдорд╛рди NFA рдХреЛрдб рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдорд╛рди рдЕрдВрддрд╣реАрди рдЪрдХреНрд░ + 100% рдмрд╛рдкреВ рдЙрдкрдпреЛрдЧ рд╣реИред

рдУрдкрдирд╕реЛрд░реНрд╕ рдЯреАрд╕реАрдПрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреЗ рд╕рднреА рдореМрдЬреВрджрд╛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ (рд╡рд┐рдХрд╛рд╕ рд╕рд╣рд┐рдд) рдореЗрдВ рдПрдХ рдЧрд▓рддреА рдкрд╛рдИ рдЧрдИ рдереАред рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ Postgres рдПрдХ рд╕рдорд╛рди API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдЗрд╕ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдХреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЦрд┐рд▓рд╛рдиреЗ рд╕реЗ рдереНрд░реЗрдб (рдкреНрд░рдХреНрд░рд┐рдпрд╛) рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬрдорд╛ рд╣реЛ рдЬрд╛рддреА рд╣реИ рдЬреЛ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдореВрд╣реАрдХрд░рдг рдореЗрдВ рдХреЗрд╡рд▓ рдкрд╛рдВрдЪрд╡реЗрдВ рдпрд╛ рдЕрдзрд┐рдХ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рдХреНрд░рдо рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ - рдЕрд░реНрдерд╛рдд рдЪрд╛рд░ рдиреЗрд╕реНрдЯреЗрдб рд╕рдореВрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

PostgreSQL рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг:
 postgres=# select 1 where 'x' ~ '((((x)*)*)*)*'; ?column? ---------- 1 (1 row) postgres=# select 1 where 'x' ~ '(((((x)*)*)*)*)*'; 
рд╡реНрдпрд╕реНрдд!

рдЯреАрд╕реАрдПрд▓ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг:
 % regexp -about {((((x)*)*)*)*} 4 REG_UEMPTYMATCH % regexp -about {(((((x)*)*)*)*)*} 
рд╡реНрдпрд╕реНрдд!

рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддреНрд░реБрдЯрд┐ 100% рд╡реНрдпрд╕реНрдд рд╣реЛрдиреЗ рдкрд░ рдереНрд░реЗрдб рдХреЛ рдлреНрд░реАрдЬ рдХрд░ рджреЗрддреА рд╣реИ, рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рд╣реИрдВ (рдЬреЛ, рд╡реИрд╕реЗ, рд╣реИрдХрд░реНрд╕ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдбрд┐рд╕ рджреНрд╡рд╛рд░рд╛ рдмрд╣реБрдд рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдЬрдмрдХрд┐ рдЦреЛрдЬ рдЬрд╛рд░реА рд╣реИ рдФрд░ рдмрдЧ рдлрд┐рдХреНрд╕ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ ( рдЙрддреНрдкрд╛рджреЛрдВ) рдФрд░ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╡рд┐рджреЗрд╢реА рдЗрдирдкреБрдЯ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░реЗрдВред

рдЖрдЬ, рджреЛ рдмрд╛рд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдПрдХ рджреЛрд╕реНрдд рдХреЗ рдмрдЧ рдЯреНрд░реИрдХрд░ рдХреЛ рдЧрд┐рд░рд╛ рджрд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдкрд╣рд▓реА рд╢рдкрде рд╕реБрдиреА, рдФрд░ рдлрд┐рд░ рд▓реЙрдЧ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рдерд╛ (рдкреЛрд╕реНрдЯ рддрд░реНрдХ рд▓реЙрдЧ рдореЗрдВ рдЕрдХреНрд╖рдо рдереЗ), рдореИрдВрдиреЗ рдзрдиреНрдпрд╡рд╛рдж рд╕реБрдирд╛ред рдХреЗ рд▓рд┐рдП, рдЪреЗрддрд╛рд╡рдиреА рджреА - рд╕рд╢рд╕реНрддреНрд░ред

рд╕рддреНрдпрд╛рдкрд┐рдд рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╕реЗ:
рдЯреАрд╕реАрдПрд▓ 8.4, 8.5, 8.6 - рд╡рд┐рдлрд▓ ред
PostgreSQL 8.4, 9.1 - рд╡рд┐рдлрд▓ ред

рддреНрд░реБрдЯрд┐ рдХреЗ рдЕрдзреАрди рдирд╣реАрдВ :
рдЕрдЬрдЧрд░ 2.5.2 рдФрд░ 2.7 рдареАрдХ рд╣реИрдВ ред
UPD: PostgreSQL 9.2.3 - рдареАрдХ рд╣реИ ред ( рдпреВ.рд╡реА. рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЕрдиреБрд╕рд╛рд░ред starius )ред
UPD: PostgreSQL 9.2.1, 9.2.2-2 - рдареАрдХ рд╣реИ ред ( catlion рдФрд░ sdevalex рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж)ред

Source: https://habr.com/ru/post/In169183/


All Articles