9.7. ÐоиÑк по ÑаблонÑ
Postgres Pro пÑÐµÐ´Ð»Ð°Ð³Ð°ÐµÑ ÑÑи ÑазнÑÑ
ÑпоÑоба поиÑка ÑекÑÑа по ÑаблонÑ: ÑÑадиÑионнÑй опеÑаÑÐ¾Ñ LIKE ÑзÑка SQL, более ÑовÑеменнÑй SIMILAR TO (добавленнÑй в SQL:1999) и ÑегÑлÑÑнÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² ÑÑиле POSIX. Ðомимо пÑоÑÑÑÑ
опеÑаÑоÑов, оÑвеÑаÑÑиÑ
на вопÑÐ¾Ñ Â«ÑооÑвеÑÑÑвÑÐµÑ Ð»Ð¸ ÑÑÑока ÑÑÐ¾Ð¼Ñ ÑаблонÑ?», в Postgres Pro еÑÑÑ ÑÑнкÑии Ð´Ð»Ñ Ð¸Ð·Ð²Ð»ÐµÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ð·Ð°Ð¼ÐµÐ½Ñ ÑооÑвеÑÑÑвÑÑÑиÑ
подÑÑÑок и Ð´Ð»Ñ ÑÐ°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑÑоки по Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ ÑаблонÑ.
ÐодÑказка
ÐÑли ÑÑÐ¸Ñ Ð²ÑÑÑоеннÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑей оказÑваеÑÑÑ Ð½ÐµÐ´Ð¾ÑÑаÑоÑно, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе напиÑаÑÑ ÑобÑÑвеннÑе ÑÑнкÑии на ÑзÑке Perl или Tcl.
Ðнимание
ХоÑÑ ÑаÑе вÑего поиÑк по ÑегÑлÑÑÐ½Ð¾Ð¼Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð±ÑÐ²Ð°ÐµÑ Ð¾ÑÐµÐ½Ñ Ð±ÑÑÑÑÑм, ÑегÑлÑÑнÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð±ÑваÑÑ Ð¸ наÑÑолÑко ÑложнÑми, ÑÑо Ð¸Ñ Ð¾Ð±ÑабоÑка Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð½ÑÑÑ Ð¿ÑилиÑное вÑÐµÐ¼Ñ Ð¸ обÑÑм памÑÑи. ÐоÑÑÐ¾Ð¼Ñ Ð¾Ð¿Ð°ÑайÑеÑÑ Ñаблонов ÑегÑлÑÑнÑÑ Ð²ÑÑажений, поÑÑÑпаÑÑÐ¸Ñ Ð¸Ð· недовеÑеннÑÑ Ð¸ÑÑоÑников. ÐÑли Ñ Ð²Ð°Ñ Ð½ÐµÑ Ð´ÑÑгого вÑÑ Ð¾Ð´Ð°, ÑекомендÑеÑÑÑ Ð²Ð²ÐµÑÑи Ñайм-аÑÑ Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑоÑов.
ÐоиÑк Ñ Ñаблонами SIMILAR TO неÑÑÑ Ñе же ÑиÑки безопаÑноÑÑи, Ñак как конÑÑÑÑкÑÐ¸Ñ SIMILAR TO пÑедоÑÑавлÑÐµÑ Ð²Ð¾ многом Ñе же возможноÑÑи, ÑÑо и ÑегÑлÑÑнÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² ÑÑиле POSIX.
ÐоиÑк Ñ LIKE гоÑаздо пÑоÑе, Ñем два дÑÑгие ваÑианÑа, поÑÑÐ¾Ð¼Ñ ÐµÐ³Ð¾ безопаÑнее иÑполÑзоваÑÑ Ñ Ð½ÐµÐ´Ð¾Ð²ÐµÑеннÑми иÑÑоÑниками Ñаблонов поиÑка.
9.7.1. LIKE
ÑÑÑокаLIKEÑаблон[ESCAPEÑпеÑÑимвол]ÑÑÑокаNOT LIKEÑаблон[ESCAPEÑпеÑÑимвол]
ÐÑÑажение LIKE возвÑаÑÐ°ÐµÑ true, еÑли ÑÑÑока ÑооÑвеÑÑÑвÑÐµÑ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ ÑаблонÑ. (Ðак можно бÑло ожидаÑÑ, вÑÑажение NOT LIKE возвÑаÑÐ°ÐµÑ false, когда LIKE возвÑаÑÐ°ÐµÑ true, и наобоÑоÑ. ÐÑÐ¾Ð¼Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑавноÑилÑно вÑÑажение NOT (.)ÑÑÑока LIKE Ñаблон)
ÐÑли Ñаблон не ÑодеÑÐ¶Ð¸Ñ Ð·Ð½Ð°ÐºÐ¾Ð² пÑоÑенÑа и подÑÑÑкиваний, Ñогда Ñаблон пÑедÑÑавлÑÐµÑ Ð² ÑоÑноÑÑи ÑÑÑÐ¾ÐºÑ Ð¸ LIKE ÑабоÑÐ°ÐµÑ ÐºÐ°Ðº опеÑаÑÐ¾Ñ ÑÑавнениÑ. ÐодÑÑÑкивание (_) в Ñаблоне подменÑÐµÑ (вмеÑÑо него подÑ
одиÑ) лÑбой Ñимвол; а знак пÑоÑенÑа (%) подменÑÐµÑ Ð»ÑбÑÑ (в Ñом ÑиÑле и пÑÑÑÑÑ) поÑледоваÑелÑноÑÑÑ Ñимволов.
ÐеÑколÑко пÑимеÑов:
'abc' LIKE 'abc' true 'abc' LIKE 'a%' true 'abc' LIKE '_b_' true 'abc' LIKE 'c' false
ÐÑи пÑовеÑке по ÑÐ°Ð±Ð»Ð¾Ð½Ñ LIKE вÑегда ÑаÑÑмаÑÑиваеÑÑÑ Ð²ÑÑ ÑÑÑока. ÐоÑÑомÑ, еÑли нÑжно найÑи поÑледоваÑелÑноÑÑÑ Ñимволов где-Ñо в ÑеÑедине ÑÑÑоки, Ñаблон должен наÑинаÑÑÑÑ Ð¸ заканÑиваÑÑÑÑ Ð·Ð½Ð°ÐºÐ°Ð¼Ð¸ пÑоÑенÑа.
ЧÑÐ¾Ð±Ñ Ð½Ð°Ð¹Ñи в ÑÑÑоке бÑквалÑное вÑ
ождение знака пÑоÑенÑа или подÑÑÑкиваниÑ, пеÑед ÑооÑвеÑÑÑвÑÑÑим Ñимволом в Ñаблоне нÑжно добавиÑÑ ÑпеÑÑимвол. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð² каÑеÑÑве ÑпеÑÑимвола вÑбÑана обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа, но Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿ÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ESCAPE можно вÑбÑаÑÑ Ð¸ дÑÑгой. ЧÑÐ¾Ð±Ñ Ð²ÐºÐ»ÑÑиÑÑ ÑпеÑÑимвол в Ñаблон поиÑка, пÑодÑблиÑÑйÑе его.
ÐÑимеÑание
ÐÑли паÑамеÑÑ standard_conforming_strings вÑклÑÑен, каждÑй Ñимвол обÑаÑной коÑой ÑеÑÑÑ, запиÑÑваемÑй в ÑекÑÑовой конÑÑанÑе, нÑжно дÑблиÑоваÑÑ. ÐодÑобнее ÑÑо опиÑано в ÐодÑазделе 4.1.2.1.
Также можно оÑказаÑÑÑÑ Ð¾Ñ ÑпеÑÑимвола, напиÑав ESCAPE ''. ÐÑи ÑÑом меÑ
анизм ÑпеÑпоÑледоваÑелÑноÑÑей ÑакÑиÑеÑки оÑклÑÑаеÑÑÑ Ð¸ иÑполÑзоваÑÑ Ð·Ð½Ð°ÐºÐ¸ пÑоÑенÑа и подÑÑÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð±ÑквалÑно в Ñаблоне нелÑзÑ.
ÐмеÑÑо LIKE можно иÑполÑзоваÑÑ ÐºÐ»ÑÑевое Ñлово ILIKE, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð¸Ñк бÑл ÑегиÑÑÑ-незавиÑимÑм Ñ ÑÑÑÑом ÑекÑÑей ÑзÑковой ÑÑедÑ. ÐÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð½Ðµ опиÑан в ÑÑандаÑÑе SQL; ÑÑо ÑаÑÑиÑение Postgres Pro.
ÐÑоме Ñого, в Postgres Pro еÑÑÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ ~~, ÑавнознаÑнÑй LIKE, и ~~*, ÑооÑвеÑÑÑвÑÑÑий ILIKE. ÐÑÑÑ Ñакже два опеÑаÑоÑа !~~ и !~~*, пÑедÑÑавлÑÑÑие NOT LIKE и NOT ILIKE, ÑооÑвеÑÑÑвенно. ÐÑе ÑÑи опеÑаÑоÑÑ Ð¾ÑноÑÑÑÑÑ Ðº оÑобенноÑÑÑм Postgres Pro. ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑвидеÑÑ Ð¸Ñ
, напÑимеÑ, в вÑводе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ EXPLAIN, Ñак как пÑи ÑазбоÑе запÑоÑа пÑовеÑка LIKE и подобнÑе заменÑÑÑÑÑ Ð¸Ð¼Ð¸.
ФÑÐ°Ð·Ñ LIKE, ILIKE, NOT LIKE и NOT ILIKE в ÑинÑакÑиÑе Postgres Pro обÑÑно обÑабаÑÑваÑÑÑÑ ÐºÐ°Ðº опеÑаÑоÑÑ; напÑимеÑ, иÑ
можно иÑполÑзоваÑÑ Ð² конÑÑÑÑкÑиÑÑ
вÑÑажение опеÑаÑÐ¾Ñ ANY (подвÑÑажение), Ñ
оÑÑ Ð¿Ñедложение ESCAPE здеÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð½ÐµÐ»ÑзÑ. РнекоÑоÑÑÑ
оÑобÑÑ
ÑлÑÑаÑÑ
вÑÑ Ð¶Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð¸ÑполÑзоваÑÑ Ð²Ð¼ÐµÑÑо ниÑ
нижележаÑие опеÑаÑоÑÑ.
9.7.2. РегÑлÑÑнÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ SIMILAR TO
ÑÑÑокаSIMILAR TOÑаблон[ESCAPEÑпеÑÑимвол]ÑÑÑокаNOT SIMILAR TOÑаблон[ESCAPEÑпеÑÑимвол]
ÐпеÑаÑÐ¾Ñ SIMILAR TO возвÑаÑÐ°ÐµÑ true или false в завиÑимоÑÑи Ð¾Ñ Ñого, ÑооÑвеÑÑÑвÑÐµÑ Ð»Ð¸ Ð´Ð°Ð½Ð½Ð°Ñ ÑÑÑока ÑÐ°Ð±Ð»Ð¾Ð½Ñ Ð¸Ð»Ð¸ неÑ. Ðн ÑабоÑÐ°ÐµÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾ опеÑаÑоÑÑ LIKE, ÑолÑко его ÑÐ°Ð±Ð»Ð¾Ð½Ñ ÑооÑвеÑÑÑвÑÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑегÑлÑÑнÑÑ
вÑÑажений в ÑÑандаÑÑе SQL. РегÑлÑÑнÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ SQL пÑедÑÑавлÑÑÑ Ñобой лÑбопÑÑнÑй гибÑид ÑинÑакÑиÑа LIKE Ñ ÑинÑакÑиÑом обÑÑнÑÑ
ÑегÑлÑÑнÑÑ
вÑÑажений.
Ðак и LIKE, ÑÑловие SIMILAR TO иÑÑинно, ÑолÑко еÑли Ñаблон ÑооÑвеÑÑÑвÑÐµÑ Ð²Ñей ÑÑÑоке; ÑÑо оÑлиÑаеÑÑÑ Ð¾Ñ ÑÑловий Ñ ÑегÑлÑÑнÑми вÑÑажениÑми, в коÑоÑÑÑ
Ñаблон Ð¼Ð¾Ð¶ÐµÑ ÑооÑвеÑÑÑвоваÑÑ Ð»Ñбой ÑаÑÑи ÑÑÑоки. Также подобно LIKE, SIMILAR TO воÑпÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ _ и % как знаки подÑÑановки, подменÑÑÑие лÑбой один Ñимвол или лÑбÑÑ Ð¿Ð¾Ð´ÑÑÑокÑ, ÑооÑвеÑÑÑвенно (в ÑегÑлÑÑнÑÑ
вÑÑажениÑÑ
POSIX им аналогиÑÐ½Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ . и .*).
Ðомимо ÑÑедÑÑв опиÑÐ°Ð½Ð¸Ñ Ñаблонов, позаимÑÑвованнÑÑ
Ð¾Ñ LIKE, SIMILAR TO поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑледÑÑÑие меÑаÑимволÑ, ÑнаÑледованнÑе Ð¾Ñ ÑегÑлÑÑнÑÑ
вÑÑажений POSIX:
|ознаÑÐ°ÐµÑ Ð²ÑÐ±Ð¾Ñ (одного из двÑÑ Ð²Ð°ÑианÑов).*ознаÑÐ°ÐµÑ Ð¿Ð¾Ð²ÑоÑение пÑедÑдÑÑего ÑлеменÑа 0 и более Ñаз.+ознаÑÐ°ÐµÑ Ð¿Ð¾Ð²ÑоÑение пÑедÑдÑÑего ÑлеменÑа 1 и более Ñаз.?ознаÑÐ°ÐµÑ Ð²Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ðµ пÑедÑдÑÑего ÑлеменÑа 0 или 1 Ñаз.{m}ознаÑÐ°ÐµÑ Ð¿Ð¾Ð²ÑоÑÑÐµÑ Ð¿ÑедÑдÑÑего ÑлеменÑа ÑовноmÑаз.{m,}ознаÑÐ°ÐµÑ Ð¿Ð¾Ð²ÑоÑение пÑедÑдÑÑего ÑлеменÑаmили более Ñаз.{m,n}ознаÑÐ°ÐµÑ Ð¿Ð¾Ð²ÑоÑение пÑедÑдÑÑего ÑлеменÑа не менее Ñемmи не более ÑемnÑаз.Скобки
()обÑединÑÑÑ Ð½ÐµÑколÑко ÑлеменÑов в Ð¾Ð´Ð½Ñ Ð»Ð¾Ð³Ð¸ÑеÑкÑÑ Ð³ÑÑппÑ.ÐвадÑаÑнÑе Ñкобки
[...]обознаÑаÑÑ ÐºÐ»Ð°ÑÑ Ñимволов Ñак же, как и в ÑегÑлÑÑнÑÑ Ð²ÑÑажениÑÑ POSIX.
ÐбÑаÑиÑе внимание, ÑоÑка (.) не ÑвлÑеÑÑÑ Ð¼ÐµÑаÑимволом Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑоÑа SIMILAR TO.
Ðак и Ñ LIKE, обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа оÑменÑÐµÑ ÑпеÑиалÑное знаÑение лÑбого из ÑÑиÑ
меÑаÑимволов, а пÑедложение ESCAPE позволÑÐµÑ Ð²ÑбÑаÑÑ Ð´ÑÑгой ÑпеÑÑимвол.
ÐеÑколÑко пÑимеÑов:
'abc' SIMILAR TO 'abc' true 'abc' SIMILAR TO 'a' false 'abc' SIMILAR TO '%(b|d)%' true 'abc' SIMILAR TO '(b|c)%' false
ФÑнкÑÐ¸Ñ substring Ñ ÑÑÐµÐ¼Ñ Ð¿Ð°ÑамеÑÑами, substring( Ð¸Ð·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð¿Ð¾Ð´ÑÑÑокÑ, ÑооÑвеÑÑÑвÑÑÑÑÑ ÑÐ°Ð±Ð»Ð¾Ð½Ñ ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ SQL. Ðак и Ñ ÑÑÑока from Ñаблон for ÑпеÑÑимвол)SIMILAR TO, ÑÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ ÑÐ°Ð±Ð»Ð¾Ð½Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° ÑооÑвеÑÑÑвоваÑÑ Ð²ÑÑ ÑÑÑока; в пÑоÑивном ÑлÑÑае ÑÑнкÑÐ¸Ñ Ð½Ðµ найдÑÑ Ð½Ð¸Ñего и веÑнÑÑ NULL. ÐÐ»Ñ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑаÑÑи Ñаблона, коÑоÑÐ°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ Ð²Ð¾Ð·Ð²ÑаÑена в ÑлÑÑае ÑÑпеÑ
а, Ñаблон должен ÑодеÑжаÑÑ Ð´Ð²Ð° ÑпеÑÑимвола и кавÑÑки (") поÑле каждого. ÐÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ ÑаÑÑÑ Ñаблона Ð¼ÐµÐ¶Ð´Ñ Ð´Ð²ÑÐ¼Ñ Ñакими маÑкеÑами.
ÐеÑколÑко пÑимеÑов Ñ Ð¼Ð°ÑкеÑами #", вÑделÑÑÑими возвÑаÑаемÑÑ ÑÑÑокÑ:
substring('foobar' from '%#"o_b#"%' for '#') oob
substring('foobar' from '#"o_b#"%' for '#') NULL9.7.3. РегÑлÑÑнÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ POSIX
РТаблиÑе 9.14 пеÑеÑиÑÐ»ÐµÐ½Ñ Ð²Ñе ÑÑÑеÑÑвÑÑÑие опеÑаÑоÑÑ Ð´Ð»Ñ Ð¿ÑовеÑки ÑÑÑок ÑегÑлÑÑнÑми вÑÑажениÑми POSIX.
ТаблиÑа 9.14. ÐпеÑаÑоÑÑ ÑегÑлÑÑнÑÑ Ð²ÑÑажений
| ÐпеÑаÑÐ¾Ñ | ÐпиÑание | ÐÑÐ¸Ð¼ÐµÑ |
|---|---|---|
~ | ÐÑовеÑÑÐµÑ ÑооÑвеÑÑÑвие ÑегÑлÑÑÐ½Ð¾Ð¼Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ñ ÑÑÑÑом ÑегиÑÑÑа | 'thomas' ~ '.*thomas.*' |
~* | ÐÑовеÑÑÐµÑ ÑооÑвеÑÑÑвие ÑегÑлÑÑÐ½Ð¾Ð¼Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð±ÐµÐ· ÑÑÑÑа ÑегиÑÑÑа | 'thomas' ~* '.*Thomas.*' |
!~ | ÐÑовеÑÑÐµÑ Ð½ÐµÑооÑвеÑÑÑвие ÑегÑлÑÑÐ½Ð¾Ð¼Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ñ ÑÑÑÑом ÑегиÑÑÑа | 'thomas' !~ '.*Thomas.*' |
!~* | ÐÑовеÑÑÐµÑ Ð½ÐµÑооÑвеÑÑÑвие ÑегÑлÑÑÐ½Ð¾Ð¼Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð±ÐµÐ· ÑÑÑÑа ÑегиÑÑÑа | 'thomas' !~* '.*vadim.*' |
РегÑлÑÑнÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ POSIX пÑедоÑÑавлÑÑÑ Ð±Ð¾Ð»ÐµÐµ моÑнÑе ÑÑедÑÑва поиÑка по Ñаблонам, Ñем опеÑаÑоÑÑ LIKE и SIMILAR TO. Ðо многиÑ
командаÑ
Unix, ÑакиÑ
как egrep, sed и awk иÑполÑзÑеÑÑÑ ÑзÑк Ñаблонов, поÑ
ожий на опиÑаннÑй здеÑÑ.
РегÑлÑÑное вÑÑажение â ÑÑо поÑледоваÑелÑноÑÑÑ Ñимволов, пÑедÑÑавлÑÑÑÐ°Ñ Ñобой кÑаÑкое опÑеделение набоÑа ÑÑÑок (ÑегÑлÑÑное множеÑÑво). СÑÑока ÑÑиÑаеÑÑÑ ÑооÑвеÑÑÑвÑÑÑей ÑегÑлÑÑÐ½Ð¾Ð¼Ñ Ð²ÑÑажениÑ, еÑли она ÑвлÑеÑÑÑ Ñленом ÑегÑлÑÑного множеÑÑва, опиÑÑваемого ÑегÑлÑÑнÑм вÑÑажением. Ðак и Ð´Ð»Ñ LIKE, ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ñаблона непоÑÑедÑÑвенно ÑооÑвеÑÑÑвÑÑÑ Ñимволам ÑÑÑоки, за иÑклÑÑением ÑпеÑиалÑнÑÑ
Ñимволов ÑзÑка ÑегÑлÑÑнÑÑ
вÑÑажений. ÐÑи ÑÑом ÑпеÑÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ÑегÑлÑÑнÑÑ
вÑÑажений оÑлиÑаеÑÑÑ Ð¾Ñ ÑпеÑÑимволов LIKE. РоÑлиÑие Ð¾Ñ Ñаблонов LIKE, ÑегÑлÑÑное вÑÑажение Ð¼Ð¾Ð¶ÐµÑ ÑовпадаÑÑ Ñ Ð»Ñбой ÑаÑÑÑÑ ÑÑÑоки, еÑли ÑолÑко оно не пÑивÑзано Ñвно к наÑÐ°Ð»Ñ Ð¸/или конÑÑ ÑÑÑоки.
ÐеÑколÑко пÑимеÑов:
'abc' ~ 'abc' true 'abc' ~ '^a' true 'abc' ~ '(b|d)' true 'abc' ~ '^(b|c)' false
Ðолее подÑобно ÑзÑк Ñаблонов в ÑÑиле POSIX опиÑан ниже.
ФÑнкÑÐ¸Ñ substring Ñ Ð´Ð²ÑÐ¼Ñ Ð¿Ð°ÑамеÑÑами, substring(, Ð¸Ð·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð¿Ð¾Ð´ÑÑÑокÑ, ÑооÑвеÑÑÑвÑÑÑÑÑ ÑÐ°Ð±Ð»Ð¾Ð½Ñ ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ POSIX. Ðна возвÑаÑÐ°ÐµÑ ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ ÑекÑÑа, подÑ
одÑÑий ÑаблонÑ, еÑли Ñаковой наÑ
одиÑÑÑ Ð² ÑÑÑоке, либо NULL в пÑоÑивном ÑлÑÑае. Ðо еÑли Ñаблон ÑодеÑÐ¶Ð¸Ñ Ñкобки, она возвÑаÑÐ°ÐµÑ Ð¿ÐµÑвое подвÑÑажение, заклÑÑÑнное в Ñкобки (Ñо, коÑоÑое наÑинаеÑÑÑ Ñ Ñамой пеÑвой оÑкÑÑваÑÑей Ñкобки). ÐÑли Ð²Ñ Ñ
оÑиÑе иÑполÑзоваÑÑ Ñкобки, но не в Ñаком оÑобом Ñежиме, можно пÑоÑÑо заклÑÑиÑÑ Ð² ниÑ
вÑÑ Ð²ÑÑажение. ÐÑли же вам нÑжно вклÑÑиÑÑ Ñкобки в Ñаблон до подвÑÑажениÑ, коÑоÑое Ð²Ñ Ñ
оÑиÑе извлеÑÑ, ÑÑо можно ÑделаÑÑ, иÑполÑзÑÑ Ð³ÑÑÐ¿Ð¿Ñ Ð±ÐµÐ· заÑ
ваÑа, коÑоÑÑе бÑдÑÑ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð½Ð¸Ð¶Ðµ.ÑÑÑока from Ñаблон)
ÐеÑколÑко пÑимеÑов:
substring('foobar' from 'o.b') oob
substring('foobar' from 'o(.)b') oФÑнкÑÐ¸Ñ regexp_replace подÑÑавлÑÐµÑ Ð´ÑÑгой ÑекÑÑ Ð²Ð¼ÐµÑÑо подÑÑÑок, ÑооÑвеÑÑÑвÑÑÑиÑ
Ñаблонам ÑегÑлÑÑнÑÑ
вÑÑажений POSIX. Ðна Ð¸Ð¼ÐµÐµÑ ÑинÑакÑÐ¸Ñ regexp_replace(иÑÑ
однаÑ_ÑÑÑока, Ñаблон, замена [, Ñлаги]). ÐÑли иÑÑ
однаÑ_ÑÑÑока не ÑодеÑÐ¶Ð¸Ñ ÑÑагменÑа, подÑ
одÑÑего под Ñаблон, она возвÑаÑаеÑÑÑ Ð½ÐµÐ¸Ð·Ð¼ÐµÐ½Ð½Ð¾Ð¹. ÐÑли же ÑооÑвеÑÑÑвие наÑ
одиÑÑÑ, возвÑаÑаеÑÑÑ Ð¸ÑÑ
однаÑ_ÑÑÑока, в коÑоÑой вмеÑÑо ÑооÑвеÑÑÑвÑÑÑего ÑÑагменÑа подÑÑавлÑеÑÑÑ Ð·Ð°Ð¼ÐµÐ½Ð°. СÑÑока замена Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ \n, где n â ÑиÑло Ð¾Ñ 1 до 9, ÑказÑваÑÑее на иÑÑ
однÑй ÑÑагменÑ, ÑооÑвеÑÑÑвÑÑÑий n-Ð¾Ð¼Ñ Ð¿Ð¾Ð´Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² ÑкобкаÑ
, и Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð¾Ð±Ð¾Ð·Ð½Ð°Ñение \&, ÑказÑваÑÑее, ÑÑо бÑÐ´ÐµÑ Ð²ÑÑавлен ÑÑагменÑ, ÑооÑвеÑÑÑвÑÑÑий вÑÐµÐ¼Ñ ÑаблонÑ. ÐÑли же в ÑекÑÑ Ð·Ð°Ð¼ÐµÐ½Ñ Ð½Ñжно вклÑÑиÑÑ Ð¾Ð±ÑаÑнÑÑ ÐºÐ¾ÑÑÑ ÑеÑÑÑ Ð±ÑквалÑно, ÑледÑÐµÑ Ð½Ð°Ð¿Ð¸ÑаÑÑ \\. РнеобÑзаÑелÑном паÑамеÑÑе Ñлаги пеÑедаÑÑÑÑ ÑекÑÑÐ¾Ð²Ð°Ñ ÑÑÑока, ÑодеÑжаÑÐ°Ñ Ð½Ð¾Ð»Ñ Ð¸Ð»Ð¸ более однобÑквеннÑÑ
Ñлагов, менÑÑÑиÑ
поведение ÑÑнкÑии. Флаг i вклÑÑÐ°ÐµÑ Ð¿Ð¾Ð¸Ñк без ÑÑÑÑа ÑегиÑÑÑа, а Ñлаг g ÑказÑваеÑ, ÑÑо заменÑÑÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²Ñе подÑ
одÑÑие подÑÑÑоки, а не ÑолÑко пеÑÐ²Ð°Ñ Ð¸Ð· ниÑ
. ÐопÑÑÑимÑе Ñлаги (кÑоме g) опиÑÐ°Ð½Ñ Ð² ТаблиÑе 9.22.
ÐеÑколÑко пÑимеÑов:
regexp_replace('foobarbaz', 'b..', 'X')
fooXbaz
regexp_replace('foobarbaz', 'b..', 'X', 'g')
fooXX
regexp_replace('foobarbaz', 'b(..)', 'X\1Y', 'g')
fooXarYXazYФÑнкÑÐ¸Ñ regexp_matches возвÑаÑÐ°ÐµÑ ÑекÑÑовÑй маÑÑив из вÑеÑ
подÑ
одÑÑиÑ
подÑÑÑок, полÑÑеннÑÑ
в ÑезÑлÑÑаÑе пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ POSIX. Ðна Ð¸Ð¼ÐµÐµÑ ÑинÑакÑÐ¸Ñ regexp_matches(ÑÑÑока, Ñаблон [, Ñлаги]). ÐÑа ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð²Ñе не веÑнÑÑÑ ÑÑÑок или веÑнÑÑÑ Ð¾Ð´Ð½Ñ Ð¸Ð»Ð¸ неÑколÑко ÑÑÑок (Ñм. опиÑание Ñлага g ниже). ÐÑли Ñаблон не наÑ
одиÑÑÑ Ð² ÑÑÑоке, ÑÑнкÑÐ¸Ñ Ð½Ðµ возвÑаÑÐ°ÐµÑ ÑÑÑок. ÐÑли Ñаблон не ÑодеÑÐ¶Ð¸Ñ Ð¿Ð¾Ð´Ð²ÑÑажений в ÑкобкаÑ
, Ñогда Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑÑÑоки возвÑаÑаеÑÑÑ Ð¼Ð°ÑÑив Ñ Ð¾Ð´Ð½Ð¸Ð¼ ÑлеменÑом, ÑодеÑжаÑим подÑÑÑокÑ, ÑооÑвеÑÑÑвÑÑÑÑÑ Ð²ÑÐµÐ¼Ñ ÑаблонÑ. ÐÑли же Ñаблон ÑодеÑÐ¶Ð¸Ñ Ð¿Ð¾Ð´Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² ÑкобкаÑ
, ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð¼Ð°ÑÑив ÑлеменÑов, в коÑоÑом n-й ÑÐ»ÐµÐ¼ÐµÐ½Ñ ÑооÑвеÑÑÑвÑÐµÑ n-Ð¼Ñ Ð¿Ð¾Ð´Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² ÑкобкаÑ
(не ÑÑиÑÐ°Ñ Ñкобки «без заÑ
ваÑа»; подÑобнее об ÑÑом ниже). РнеобÑзаÑелÑном паÑамеÑÑе Ñлаги пеÑедаÑÑÑÑ ÑекÑÑÐ¾Ð²Ð°Ñ ÑÑÑока, ÑодеÑжаÑÐ°Ñ Ð½Ð¾Ð»Ñ Ð¸Ð»Ð¸ более однобÑквеннÑÑ
Ñлагов, менÑÑÑиÑ
поведение ÑÑнкÑии. Флаг g ÑказÑваеÑ, ÑÑо ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° наÑ
одиÑÑ Ð² ÑÑÑоке не ÑолÑко пеÑвое, а вÑе ÑооÑвеÑÑÑÐ²Ð¸Ñ ÑаблонÑ, и возвÑаÑаÑÑ ÑÑÑÐ¾ÐºÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑооÑвеÑÑÑвиÑ. ÐопÑÑÑимÑе Ñлаги (кÑоме g) опиÑÐ°Ð½Ñ Ð² ТаблиÑе 9.22.
ÐеÑколÑко пÑимеÑов:
SELECT regexp_matches('foobarbequebaz', '(bar)(beque)');
regexp_matches
----------------
{bar,beque}
(1 row)
SELECT regexp_matches(
'foobarbequebazilbarfbonk', '(b[^b]+)(b[^b]+)', 'g');
regexp_matches
----------------
{bar,beque}
{bazil,barf}
(2 rows)
SELECT regexp_matches('foobarbequebaz', 'barbeque');
regexp_matches
----------------
{barbeque}
(1 row)ÐобиÑÑÑÑ, ÑÑÐ¾Ð±Ñ ÑÑнкÑÐ¸Ñ regexp_matches() вÑегда возвÑаÑала Ð¾Ð´Ð½Ñ ÑÑÑокÑ, можно Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ð¾Ð³Ð¾ подзапÑоÑа; ÑÑо оÑобенно полезно в ÑпиÑке вÑбоÑки SELECT, когда нÑжно полÑÑиÑÑ Ð²Ñе ÑÑÑоки, в Ñом ÑиÑле и не ÑооÑвеÑÑÑвÑÑÑие ÑаблонÑ:
SELECT col1, (SELECT regexp_matches(col2, '(bar)(beque)')) FROM tab;
ФÑнкÑÐ¸Ñ regexp_split_to_table ÑазделÑÐµÑ ÑÑÑокÑ, иÑполÑзÑÑ Ð² каÑеÑÑве ÑазделиÑÐµÐ»Ñ Ñаблон ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ POSIX. Ðна Ð¸Ð¼ÐµÐµÑ ÑинÑакÑÐ¸Ñ regexp_split_to_table(ÑÑÑока, Ñаблон [, Ñлаги]). ÐÑли Ñаблон не наÑ
одиÑÑÑ Ð² пеÑеданной ÑÑÑоке, возвÑаÑаеÑÑÑ Ð²ÑÑ ÑÑÑока Ñеликом. ÐÑли наÑ
одиÑÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ñм одно вÑ
ождение, Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñакого вÑ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑÑÑ ÑекÑÑ Ð¾Ñ ÐºÐ¾Ð½Ñа пÑедÑдÑÑего вÑ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ (или наÑала ÑÑÑоки) до наÑала вÑ
ождениÑ. ÐоÑле поÑледнего найденного вÑ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑÑÑ ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ Ð¾Ñ ÐµÐ³Ð¾ конÑа до конÑа ÑÑÑоки. РнеобÑзаÑелÑном паÑамеÑÑе Ñлаги пеÑедаÑÑÑÑ ÑекÑÑÐ¾Ð²Ð°Ñ ÑÑÑока, ÑодеÑжаÑÐ°Ñ Ð½Ð¾Ð»Ñ Ð¸Ð»Ð¸ более однобÑквеннÑÑ
Ñлагов, менÑÑÑиÑ
поведение ÑÑнкÑии. Флаги, коÑоÑÑе поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ regexp_split_to_table, опиÑÐ°Ð½Ñ Ð² ТаблиÑе 9.22.
ФÑнкÑÐ¸Ñ regexp_split_to_array ведÑÑ ÑÐµÐ±Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾ regexp_split_to_table, за иÑклÑÑением Ñого, ÑÑо regexp_split_to_array возвÑаÑÐ°ÐµÑ ÑезÑлÑÑÐ°Ñ Ð² маÑÑиве ÑлеменÑов Ñипа text. Ðна Ð¸Ð¼ÐµÐµÑ ÑинÑакÑÐ¸Ñ regexp_split_to_array(ÑÑÑока, Ñаблон [, Ñлаги]). ÐаÑамеÑÑÑ Ñ ÑÑой ÑÑнкÑии Ñе же, ÑÑо и Ñ regexp_split_to_table.
ÐеÑколÑко пÑимеÑов:
SELECT foo FROM regexp_split_to_table('the quick brown fox jumps over the lazy dog', '\s+') AS foo;
foo
-------
the
quick
brown
fox
jumps
over
the
lazy
dog
(9 rows)
SELECT regexp_split_to_array('the quick brown fox jumps over the lazy dog', '\s+');
regexp_split_to_array
-----------------------------------------------
{the,quick,brown,fox,jumps,over,the,lazy,dog}
(1 row)
SELECT foo FROM regexp_split_to_table('the quick brown fox', '\s*') AS foo;
foo
-----
t
h
e
q
u
i
c
k
b
r
o
w
n
f
o
x
(16 rows)Ðак показÑÐ²Ð°ÐµÑ Ð¿Ð¾Ñледний пÑимеÑ, ÑÑнкÑии ÑÐ°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑегÑлÑÑнÑм вÑÑажениÑм игноÑиÑÑÑÑ Ð²Ñ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð½Ñлевой длинÑ, идÑÑие в наÑале и в конÑе ÑÑÑоки, а Ñакже непоÑÑедÑÑвенно за пÑедÑдÑÑим вÑ
ождением. ÐÑо поведение пÑоÑивоÑеÑÐ¸Ñ ÑÑÑÐ¾Ð³Ð¾Ð¼Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð¸Ñка по ÑегÑлÑÑнÑм вÑÑажениÑм, коÑоÑÑй ÑеализÑÐµÑ regexp_matches, но обÑÑно более Ñдобно на пÑакÑике. Ðодобное поведение наблÑдаеÑÑÑ Ð¸ в дÑÑгиÑ
пÑогÑаммнÑÑ
ÑÑедаÑ
, напÑÐ¸Ð¼ÐµÑ Ð² Perl.
9.7.3.1. ÐодÑобное опиÑание ÑегÑлÑÑнÑÑ Ð²ÑÑажений
РегÑлÑÑнÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² Postgres Pro ÑÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ñ Ñ Ð¸ÑполÑзованием пÑогÑаммного пакеÑа, коÑоÑÑй ÑазÑабоÑал ÐенÑи СпенÑÐµÑ (Henry Spencer). ÐÑакÑиÑеÑки вÑÑ ÑледÑÑÑее опиÑание ÑегÑлÑÑнÑÑ Ð²ÑÑажений доÑловно ÑкопиÑовано из его ÑÑководÑÑва.
РегÑлÑÑное вÑÑажение (Regular expression, RE), ÑоглаÑно опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð² POSIX 1003.2, Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ Ð´Ð²Ðµ ÑоÑмÑ: ÑаÑÑиÑенное RE или ERE (гÑÑбо говоÑÑ, ÑÑо вÑÑажениÑ, коÑоÑÑе Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÐµÑ egrep) и пÑоÑÑое RE или BRE (гÑÑбо говоÑÑ, ÑÑо вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ed). Postgres Pro поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¾Ð±Ðµ ÑоÑмÑ, а кÑоме Ñого ÑеализÑÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑе ÑаÑÑиÑениÑ, не пÑедÑÑмоÑÑеннÑе ÑÑандаÑÑом POSIX, но ÑиÑоко иÑполÑзÑемÑе вÑледÑÑвие иÑ
доÑÑÑпноÑÑи в некоÑоÑÑÑ
ÑзÑкаÑ
пÑогÑаммиÑованиÑ, напÑÐ¸Ð¼ÐµÑ Ð² Perl и Tcl. РегÑлÑÑнÑе вÑÑажениÑ, иÑполÑзÑÑÑие ÑÑи неÑовмеÑÑимÑе Ñ POSIX ÑаÑÑиÑениÑ, здеÑÑ Ð½Ð°Ð·ÑваÑÑÑÑ ÑÑовеÑÑенÑÑвованнÑми RE или ARE. ARE пÑакÑиÑеÑки пÑедÑÑавлÑÑÑ Ñобой надмножеÑÑво ERE, Ñогда как BRE оÑлиÑаÑÑÑÑ Ð½ÐµÐºÐ¾ÑоÑой неÑовмеÑÑимоÑÑÑÑ Ð² запиÑи (помимо Ñого, ÑÑо они гоÑаздо более огÑаниÑенÑ). СнаÑала Ð¼Ñ Ð¾Ð¿Ð¸Ñем ÑоÑÐ¼Ñ ARE и ERE, оÑмеÑив оÑобенноÑÑи, пÑиÑÑÑие ÑолÑко ARE, а заÑем ÑаÑÑкажем, Ñем Ð¾Ñ Ð½Ð¸Ñ
оÑлиÑаÑÑÑÑ BRE.
ÐÑимеÑание
Postgres Pro изнаÑалÑно вÑегда пÑедполагаеÑ, ÑÑо ÑегÑлÑÑное вÑÑажение ÑледÑÐµÑ Ð¿Ñавилам ARE. Ðднако можно пеÑеклÑÑиÑÑÑÑ Ð½Ð° более огÑаниÑеннÑе пÑавила ERE или BRE, добавив в Ñаблон RE вÑÑÑоеннÑй паÑамеÑÑ, как опиÑано в ÐодÑазделе 9.7.3.4. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ Ð´Ð»Ñ ÑовмеÑÑимоÑÑи Ñ Ð¿ÑиложениÑми, ожидаÑÑими Ð¾Ñ Ð¡Ð£ÐÐ ÑÑÑогого ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñавилам POSIX 1003.2.
РегÑлÑÑное вÑÑажение опÑеделÑеÑÑÑ ÐºÐ°Ðº одна или более веÑвей, ÑазделÑннÑÑ
Ñимволами |. Ðно ÑÑиÑаеÑÑÑ ÑооÑвеÑÑÑвÑÑÑим вÑемÑ, ÑÑо ÑооÑвеÑÑÑвÑÐµÑ Ð¾Ð´Ð½Ð¾Ð¹ из ÑÑиÑ
веÑвей.
ÐеÑÐ²Ñ â ÑÑо Ð½Ð¾Ð»Ñ Ð¸Ð»Ð¸ неÑколÑко колиÑеÑÑвеннÑÑ Ð°Ñомов или огÑаниÑений, ÑоединÑннÑÑ Ð²Ð¼ÐµÑÑе. СооÑвеÑÑÑвие веÑви в Ñелом обÑазÑеÑÑÑ Ð¸Ð· ÑооÑвеÑÑÑÐ²Ð¸Ñ Ð¿ÐµÑвой ÑаÑÑи, за коÑоÑÑм ÑледÑÐµÑ ÑооÑвеÑÑÑвие вÑоÑой ÑаÑÑи и Ñ. д.; пÑÑÑой веÑви ÑооÑвеÑÑÑвÑÐµÑ Ð¿ÑÑÑÐ°Ñ ÑÑÑока.
ÐолиÑеÑÑвеннÑй аÑом â ÑÑо аÑом, за коÑоÑÑм Ð¼Ð¾Ð¶ÐµÑ ÑледоваÑÑ Ð¾Ð¿ÑеделиÑÐµÐ»Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑва. Ðез ÑÑого опÑеделиÑÐµÐ»Ñ ÐµÐ¼Ñ ÑооÑвеÑÑÑвÑÐµÑ Ð¾Ð´Ð½Ð¾ Ð²Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ðµ аÑома. С опÑеделиÑелем колиÑеÑÑва ÐµÐ¼Ñ Ð¼Ð¾Ð¶ÐµÑ ÑооÑвеÑÑÑвоваÑÑ Ð½ÐµÐºÐ¾ÑоÑое ÑиÑло Ð²Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ð¹ ÑÑого аÑома. ÐÑе возможнÑе аÑÐ¾Ð¼Ñ Ð¿ÐµÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 9.15. ÐаÑианÑÑ Ð¾Ð¿ÑеделиÑелей колиÑеÑÑва и Ð¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿ÐµÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 9.16.
ÐгÑаниÑÐµÐ½Ð¸Ñ ÑооÑвеÑÑÑвÑÐµÑ Ð¿ÑÑÑÐ°Ñ ÑÑÑока, но ÑÑо ÑооÑвеÑÑÑвие возможно ÑолÑко пÑи вÑполнении опÑеделÑннÑÑ ÑÑловий. ÐгÑаниÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ñам же, где и аÑомÑ, за иÑклÑÑением Ñого, ÑÑо Ð¸Ñ Ð½ÐµÐ»ÑÐ·Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÑÑÑ Ð¾Ð¿ÑеделиÑелÑми колиÑеÑÑва. ÐÑоÑÑÑе огÑаниÑÐµÐ½Ð¸Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð² ТаблиÑе 9.17; некоÑоÑÑе дополниÑелÑнÑе огÑаниÑÐµÐ½Ð¸Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð½Ð¸Ð¶Ðµ.
ТаблиÑа 9.15. ÐÑÐ¾Ð¼Ñ ÑегÑлÑÑнÑÑ Ð²ÑÑажений
| ÐÑом | ÐпиÑание |
|---|---|
(re) | (где re â лÑбое ÑегÑлÑÑное вÑÑажение) опиÑÑÐ²Ð°ÐµÑ ÑооÑвеÑÑÑвие re, пÑи ÑÑом данное ÑооÑвеÑÑÑвие заÑ
ваÑÑваеÑÑÑ Ð´Ð»Ñ Ð¿Ð¾ÑледÑÑÑей обÑабоÑки |
(?:re) | подобно пÑедÑдÑÑемÑ, но ÑооÑвеÑÑÑвие не Ð·Ð°Ñ Ð²Ð°ÑÑваеÑÑÑ (Ñ. е. ÑÑо Ð½Ð°Ð±Ð¾Ñ Ñкобок «без Ð·Ð°Ñ Ð²Ð°Ñа») (пÑименимо ÑолÑко к ARE) |
. | ÑооÑвеÑÑÑвÑÐµÑ Ð»ÑÐ±Ð¾Ð¼Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ |
[ÑимволÑ] | вÑÑажение в квадÑаÑнÑÑ
ÑкобкаÑ
, ÑооÑвеÑÑÑвÑÐµÑ Ð»ÑÐ±Ð¾Ð¼Ñ Ð¸Ð· Ñимволов (подÑобнее ÑÑо опиÑано в ÐодÑазделе 9.7.3.2) |
\k | (где k â не алÑавиÑно-ÑиÑÑовой Ñимвол) ÑооÑвеÑÑÑвÑÐµÑ Ð¾Ð±ÑÑÐ½Ð¾Ð¼Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð±ÑквалÑно, Ñ. е. \\ ÑооÑвеÑÑÑвÑÐµÑ Ð¾Ð±ÑаÑной коÑой ÑеÑÑе |
\c | где c â алÑавиÑно-ÑиÑÑовой Ñимвол (за коÑоÑÑм могÑÑ ÑледоваÑÑ Ð´ÑÑгие ÑимволÑ), ÑÑо ÑпеÑÑимвол, Ñм. ÐодÑаздел 9.7.3.3 (пÑименим ÑолÑко к ARE; в ERE и BRE ÑÑÐ¾Ð¼Ñ Ð°ÑÐ¾Ð¼Ñ ÑооÑвеÑÑÑвÑÐµÑ c) |
{ | когда за ÑÑим Ñимволом ÑледÑÐµÑ Ð»Ñбой Ñимвол, кÑоме ÑиÑÑÑ, ÑÑÐ¾Ñ Ð°Ñом ÑооÑвеÑÑÑвÑÐµÑ Ð»ÐµÐ²Ð¾Ð¹ ÑигÑÑной Ñкобке ({), еÑли же за ним ÑледÑÐµÑ ÑиÑÑа, ÑÑо обознаÑÐ°ÐµÑ Ð½Ð°Ñало гÑаниÑÑ (Ñм. ниже) |
x | (где x â один Ñимвол, не имеÑÑий ÑпеÑиалÑного знаÑениÑ) ÑооÑвеÑÑÑвÑÐµÑ ÑÑÐ¾Ð¼Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ |
ÐÑÑажение RE не Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°ÐºÐ°Ð½ÑиваÑÑÑÑ Ð¾Ð±ÑаÑной коÑой ÑеÑÑой (\).
ÐÑимеÑание
ÐÑли паÑамеÑÑ standard_conforming_strings вÑклÑÑен, каждÑй Ñимвол обÑаÑной коÑой ÑеÑÑÑ, запиÑÑваемÑй в ÑекÑÑовой конÑÑанÑе, нÑжно дÑблиÑоваÑÑ. ÐодÑобнее ÑÑо опиÑано в ÐодÑазделе 4.1.2.1.
ТаблиÑа 9.16. ÐпÑеделиÑели колиÑеÑÑва в ÑегÑлÑÑнÑÑ Ð²ÑÑажениÑÑ
| ÐпÑеделиÑÐµÐ»Ñ | СооÑвеÑÑÑвÑÐµÑ |
|---|---|
* | 0 или более Ð²Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ð¹ аÑома |
+ | 1 или более Ð²Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ð¹ аÑома |
? | 0 или 1 Ð²Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ðµ аÑома |
{m} | Ñовно m вÑ
ождений аÑома |
{m,} | m или более вÑ
ождений аÑома |
{m,n} | Ð¾Ñ m до n (вклÑÑÐ°Ñ Ð³ÑаниÑÑ) вÑ
ождений аÑома; m не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð±Ð¾Ð»ÑÑе n |
*? | не Ð¶Ð°Ð´Ð½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ * |
+? | не Ð¶Ð°Ð´Ð½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ + |
?? | не Ð¶Ð°Ð´Ð½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ ? |
{m}? | не Ð¶Ð°Ð´Ð½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ {m} |
{m,}? | не Ð¶Ð°Ð´Ð½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ {m,} |
{m,n}? | не Ð¶Ð°Ð´Ð½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ {m,n} |
Ð ÑоÑмаÑ
Ñ {...} ÑиÑла m и n опÑеделÑÑÑ Ñак назÑваемÑе гÑаниÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑва. ÐÑи ÑиÑла Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð±ÐµÐ·Ð·Ð½Ð°ÐºÐ¾Ð²Ñми деÑÑÑиÑнÑми ÑелÑми в диапазоне Ð¾Ñ 0 до 255 вклÑÑиÑелÑно.
Ðе жаднÑе опÑеделиÑели (допÑÑÑимÑе ÑолÑко в ARE) опиÑÑваÑÑ Ñе же возможнÑе ÑооÑвеÑÑÑвиÑ, ÑÑо и аналогиÑнÑе им обÑÑнÑе («жаднÑе»), но пÑедпоÑиÑаÑÑ Ð²ÑбиÑаÑÑ Ð½Ð°Ð¸Ð¼ÐµÐ½ÑÑее, а не наиболÑÑее колиÑеÑÑво Ð²Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ð¹. ÐодÑобнее ÑÑо опиÑано в ÐодÑазделе 9.7.3.5.
ÐÑимеÑание
ÐпÑеделиÑели колиÑеÑÑва не могÑÑ ÑледоваÑÑ Ð¾Ð´Ð¸Ð½ за дÑÑгим, напÑÐ¸Ð¼ÐµÑ Ð·Ð°Ð¿Ð¸ÑÑ ** бÑÐ´ÐµÑ Ð¾ÑибоÑной. ÐÑоме Ñого, опÑеделиÑели не могÑÑ ÑÑоÑÑÑ Ð² наÑале вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ подвÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸ идÑи ÑÑÐ°Ð·Ñ Ð¿Ð¾Ñле ^ или |.
ТаблиÑа 9.17. ÐгÑаниÑÐµÐ½Ð¸Ñ Ð² ÑегÑлÑÑнÑÑ Ð²ÑÑажениÑÑ
| ÐгÑаниÑение | ÐпиÑание |
|---|---|
^ | ÑооÑвеÑÑÑвÑÐµÑ Ð½Ð°ÑÐ°Ð»Ñ ÑÑÑоки |
$ | ÑооÑвеÑÑÑвÑÐµÑ ÐºÐ¾Ð½ÑÑ ÑÑÑоки |
(?=re) | позиÑивнÑй пÑоÑмоÑÑ Ð²Ð¿ÐµÑÑд наÑ
Ð¾Ð´Ð¸Ñ ÑооÑвеÑÑÑвие Ñам, где наÑинаеÑÑÑ Ð¿Ð¾Ð´ÑÑÑока, ÑооÑвеÑÑÑвÑÑÑÐ°Ñ re (ÑолÑко Ð´Ð»Ñ ARE) |
(?!re) | негаÑивнÑй пÑоÑмоÑÑ Ð²Ð¿ÐµÑÑд наÑ
Ð¾Ð´Ð¸Ñ ÑооÑвеÑÑÑвие Ñам, где не наÑинаеÑÑÑ Ð¿Ð¾Ð´ÑÑÑока, ÑооÑвеÑÑÑвÑÑÑÐ°Ñ re (ÑолÑко Ð´Ð»Ñ ARE) |
(?<=re) | позиÑивнÑй пÑоÑмоÑÑ Ð½Ð°Ð·Ð°Ð´ наÑ
Ð¾Ð´Ð¸Ñ ÑооÑвеÑÑÑвие Ñам, где заканÑиваеÑÑÑ Ð¿Ð¾Ð´ÑÑÑока, ÑооÑвеÑÑÑвÑÑÑÐ°Ñ re (ÑолÑко Ð´Ð»Ñ ARE) |
(?<!re) | негаÑивнÑй пÑоÑмоÑÑ Ð½Ð°Ð·Ð°Ð´ наÑ
Ð¾Ð´Ð¸Ñ ÑооÑвеÑÑÑвие Ñам, где не заканÑиваеÑÑÑ Ð¿Ð¾Ð´ÑÑÑока, ÑооÑвеÑÑÑвÑÑÑÐ°Ñ re (ÑолÑко Ð´Ð»Ñ ARE) |
ÐгÑаниÑÐµÐ½Ð¸Ñ Ð¿ÑоÑмоÑÑа впеÑÑд и назад не могÑÑ ÑодеÑжаÑÑ ÑÑÑлки назад (Ñм. ÐодÑаздел 9.7.3.3), и вÑе Ñкобки в Ð½Ð¸Ñ ÑÑиÑаÑÑÑÑ Â«Ñкобками без Ð·Ð°Ñ Ð²Ð°Ñа».
9.7.3.2. ÐÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² квадÑаÑнÑÑ ÑкобкаÑ
ÐÑÑажение в квадÑаÑнÑÑ
ÑкобкаÑ
ÑодеÑÐ¶Ð¸Ñ ÑпиÑок Ñимволов, заклÑÑÑннÑй в []. ÐбÑÑно ÐµÐ¼Ñ ÑооÑвеÑÑÑвÑÐµÑ Ð»Ñбой Ñимвол из ÑпиÑка (об иÑклÑÑении напиÑано ниже). ÐÑли ÑпиÑок наÑинаеÑÑÑ Ñ ^, ÐµÐ¼Ñ ÑооÑвеÑÑÑвÑÐµÑ Ð»Ñбой Ñимвол, коÑоÑÑй не пеÑеÑиÑлÑеÑÑÑ Ð´Ð°Ð»ÐµÐµ в ÑÑом ÑпиÑке. ÐÑли два Ñимвола в ÑпиÑке ÑазделÑÑÑÑÑ Ð·Ð½Ð°ÐºÐ¾Ð¼ -, ÑÑо воÑпÑинимаеÑÑÑ ÐºÐ°Ðº кÑаÑÐºÐ°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð¿Ð¾Ð»Ð½Ð¾Ð³Ð¾ инÑеÑвала Ñимволов Ð¼ÐµÐ¶Ð´Ñ Ð´Ð²ÑÐ¼Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñми (и вклÑÑÐ°Ñ Ð¸Ñ
) в поÑÑдке ÑоÑÑиÑовки; напÑÐ¸Ð¼ÐµÑ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ [0-9] в ASCII ÑооÑвеÑÑÑвÑÐµÑ Ð»ÑÐ±Ð°Ñ Ð´ÐµÑÑÑиÑÐ½Ð°Ñ ÑиÑÑа. Ðва инÑеÑвала не могÑÑ ÑазделÑÑÑ Ð¾Ð´Ð½Ñ Ð³ÑаниÑÑ, Ñ. е. вÑÑажение a-c-e недопÑÑÑимо. ÐнÑеÑÐ²Ð°Ð»Ñ Ð·Ð°Ð²Ð¸ÑÑÑ Ð¾Ñ Ð¿Ð¾ÑÑдка ÑоÑÑиÑовки, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð¼ÐµÐ½ÑÑÑÑÑ, поÑÑÐ¾Ð¼Ñ Ð² пеÑеноÑимÑÑ
пÑогÑаммаÑ
иÑ
лÑÑÑе не иÑполÑзоваÑÑ.
ЧÑÐ¾Ð±Ñ Ð²ÐºÐ»ÑÑиÑÑ Ð² ÑпиÑок ], ÑÑÐ¾Ñ Ñимвол нÑжно напиÑаÑÑ Ð¿ÐµÑвÑм (ÑÑÐ°Ð·Ñ Ð·Ð° ^, еÑли он пÑиÑÑÑÑÑвÑеÑ). ЧÑÐ¾Ð±Ñ Ð²ÐºÐ»ÑÑиÑÑ Ð² ÑпиÑок Ñимвол -, его нÑжно напиÑаÑÑ Ð¿ÐµÑвÑм или поÑледним, либо как вÑоÑÑÑ Ð³ÑаниÑÑ Ð¸Ð½ÑеÑвала. УказаÑÑ - в каÑеÑÑве пеÑвой гÑаниÑÑ Ð¸Ð½ÑеÑвал можно, заклÑÑив его Ð¼ÐµÐ¶Ð´Ñ [. и .], ÑÑÐ¾Ð±Ñ Ð¾Ð½ ÑÑал ÑлеменÑом ÑоÑÑиÑовки (Ñм. ниже). Ðа иÑклÑÑением ÑÑиÑ
Ñимволов, некоÑоÑÑÑ
комбинаÑий Ñ [ (Ñм. ÑледÑÑÑие абзаÑÑ) и ÑпеÑÑимволов (в ARE), вÑе оÑÑалÑнÑе ÑпеÑиалÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² квадÑаÑнÑÑ
ÑкобкаÑ
ÑеÑÑÑÑ ÑÐ²Ð¾Ñ Ð¾Ñобое знаÑение. Ð ÑаÑÑноÑÑи, Ñимвол \ по пÑавилам ERE или BRE воÑпÑинимаеÑÑÑ ÐºÐ°Ðº обÑÑнÑй, Ñ
оÑÑ Ð² ARE он ÑкÑаниÑÑÐµÑ Ñимвол, ÑледÑÑÑий за ним.
ÐÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² квадÑаÑнÑÑ
ÑкобкаÑ
могÑÑ ÑодеÑжаÑÑ ÑÐ»ÐµÐ¼ÐµÐ½Ñ ÑоÑÑиÑовки (Ñимвол или поÑледоваÑелÑноÑÑÑ Ñимволов или Ð¸Ð¼Ñ Ñакой поÑледоваÑелÑноÑÑи), опÑеделение коÑоÑого заклÑÑаеÑÑÑ Ð¼ÐµÐ¶Ð´Ñ [. и .]. ÐпÑеделÑÑÑÐ°Ñ ÐµÐ³Ð¾ поÑледоваÑелÑноÑÑÑ Ð²Ð¾ÑпÑинимаеÑÑÑ Ð² вÑÑажении в ÑкобкаÑ
как один ÑлеменÑ. ÐÑо позволÑÐµÑ Ð²ÐºÐ»ÑÑаÑÑ Ð² Ñакие вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑлеменÑÑ, ÑооÑвеÑÑÑвÑÑÑие поÑледоваÑелÑноÑÑи неÑколÑкиÑ
Ñимволов. ÐапÑимеÑ, Ñ ÑлеменÑом ÑоÑÑиÑовки ch в квадÑаÑнÑÑ
ÑкобкаÑ
ÑегÑлÑÑÐ½Ð¾Ð¼Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ [[.ch.]]*c бÑдÑÑ ÑооÑвеÑÑÑвоваÑÑ Ð¿ÐµÑвÑе пÑÑÑ Ñимволов ÑÑÑоки chchcc.
ÐÑимеÑание
РнаÑÑоÑÑее вÑÐµÐ¼Ñ Postgres Pro не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑлеменÑÑ ÑоÑÑиÑовки, ÑоÑÑоÑÑие из неÑколÑÐºÐ¸Ñ Ñимволов. ÐÑа инÑоÑмаÑÐ¸Ñ Ð¾ÑноÑиÑÑÑ Ðº Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ð¼Ñ Ð² бÑдÑÑем поведениÑ.
РквадÑаÑнÑÑ
ÑкобкаÑ
могÑÑ ÑодеÑжаÑÑÑÑ ÑлеменÑÑ ÑоÑÑиÑовки, заклÑÑÑннÑе Ð¼ÐµÐ¶Ð´Ñ [= и =], обознаÑаÑÑие клаÑÑÑ ÑквиваленÑноÑÑи, Ñ. е. поÑледоваÑелÑноÑÑи Ñимволов из вÑеÑ
ÑлеменÑов ÑоÑÑиÑовки, ÑквиваленÑнÑÑ
ÑказанномÑ, вклÑÑÐ°Ñ ÐµÐ³Ð¾ Ñамого. (ÐÑли Ð´Ð»Ñ ÑÑого Ñимвола Ð½ÐµÑ ÑквиваленÑнÑÑ
, он обÑабаÑÑваеÑÑÑ ÐºÐ°Ðº заклÑÑÑннÑй Ð¼ÐµÐ¶Ð´Ñ [. и .].) ÐапÑимеÑ, еÑли е и Ñ â ÑÐ»ÐµÐ½Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ клаÑÑа ÑквиваленÑноÑÑи, вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ [[=е=]], [[=Ñ=]] и [еÑ] бÑдÑÑ ÑавнознаÑнÑми. ÐлаÑÑ ÑквиваленÑноÑÑи нелÑÐ·Ñ ÑказаÑÑ Ð² каÑеÑÑве гÑаниÑÑ Ð¸Ð½ÑеÑвала.
РквадÑаÑнÑÑ
ÑкобкаÑ
Ð¼Ð¾Ð¶ÐµÑ Ñакже ÑодеÑжаÑÑÑÑ Ð¸Ð¼Ñ ÐºÐ»Ð°ÑÑа Ñимволов, заклÑÑÑнное Ð¼ÐµÐ¶Ð´Ñ [: и :], и заменÑÑÑее ÑпиÑок вÑеÑ
Ñимволов ÑÑого клаÑÑа. СÑандаÑÑнÑе имена клаÑÑов: alnum, alpha, blank, cntrl, digit, graph, lower, print, punct, space, upper и xdigit. ÐеÑÑ ÑÑÐ¾Ñ Ð½Ð°Ð±Ð¾Ñ ÐºÐ»Ð°ÑÑов опÑеделÑн в ctype и он Ð¼Ð¾Ð¶ÐµÑ Ð¼ÐµÐ½ÑÑÑÑÑ Ð² завиÑимоÑÑи Ð¾Ñ Ð»Ð¾ÐºÐ°Ð»Ð¸ (ÑзÑковой ÑÑедÑ). ÐлаÑÑ Ñимволов Ñакже нелÑÐ·Ñ Ð¸ÑполÑзоваÑÑ Ð² каÑеÑÑве гÑаниÑÑ Ð¸Ð½ÑеÑвала.
ÐÑÑÑ Ð´Ð²Ð° оÑобÑÑ
вида вÑÑажений в квадÑаÑнÑÑ
ÑкобкаÑ
: вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ [[:<:]] и [[:>:]], пÑедÑÑавлÑÑÑие Ñобой огÑаниÑениÑ, ÑооÑвеÑÑÑвÑÑÑие пÑÑÑÑм ÑÑÑокам в наÑале и конÑе Ñлова. Слово в данном конÑекÑÑе опÑеделÑеÑÑÑ ÐºÐ°Ðº поÑледоваÑелÑноÑÑÑ ÑловоÑоÑÑавлÑÑÑиÑ
Ñимволов, пеÑед или поÑле коÑоÑой Ð½ÐµÑ ÑловоÑоÑÑавлÑÑÑиÑ
Ñимволов. СловоÑоÑÑавлÑÑÑий Ñимвол â ÑÑо Ñимвол клаÑÑа alnum (опÑеделÑнного в ctype) или подÑÑÑкивание. ÐÑо ÑаÑÑиÑение ÑовмеÑÑимо Ñо ÑÑандаÑÑом POSIX 1003.2, но не опиÑано в нÑм, и поÑÑÐ¾Ð¼Ñ ÐµÐ³Ð¾ ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ Ñ Ð¾ÑÑоÑожноÑÑÑÑ Ñам, где важна ÑовмеÑÑимоÑÑÑ Ñ Ð´ÑÑгими ÑиÑÑемами. ÐбÑÑно лÑÑÑе иÑполÑзоваÑÑ Ð¾Ð³ÑаниÑиваÑÑие ÑпеÑÑимволÑ, опиÑаннÑе ниже; они Ñакже не ÑовÑем ÑÑандаÑÑнÑ, но набÑаÑÑ Ð¸Ñ
легÑе.
9.7.3.3. СпеÑÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ÑегÑлÑÑнÑÑ Ð²ÑÑажений
СпеÑÑÐ¸Ð¼Ð²Ð¾Ð»Ñ â ÑÑо ÑпеÑиалÑнÑе командÑ, ÑоÑÑоÑÑие из \ и поÑледÑÑÑего алÑавиÑно-ÑиÑÑового Ñимвола. Ðожно вÑделиÑÑ ÑледÑÑÑие каÑегоÑии ÑпеÑÑимволов: обознаÑÐµÐ½Ð¸Ñ Ñимволов, ÐºÐ¾Ð´Ñ ÐºÐ»Ð°ÑÑов, огÑаниÑÐµÐ½Ð¸Ñ Ð¸ ÑÑÑлки назад. Символ \, за коÑоÑÑм идÑÑ Ð°Ð»ÑавиÑно-ÑиÑÑовой Ñимвол, не обÑазÑÑÑий допÑÑÑимÑй ÑпеÑÑимвол, ÑÑиÑаеÑÑÑ Ð¾ÑибоÑнÑм в ARE. Ð ERE ÑпеÑÑимволов неÑ: вне квадÑаÑнÑÑ
Ñкобок паÑа из \ и поÑледÑÑÑего алÑавиÑно-ÑиÑÑового Ñимвола, воÑпÑинимаеÑÑÑ Ð¿ÑоÑÑо как даннÑй Ñимвол, а в квадÑаÑнÑÑ
ÑкобкаÑ
и Ñам Ñимвол \ воÑпÑинимаеÑÑÑ Ð¿ÑоÑÑо как обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа. (ÐоÑледнее на Ñамом деле наÑÑÑÐ°ÐµÑ ÑовмеÑÑимоÑÑÑ Ð¼ÐµÐ¶Ð´Ñ ERE и ARE.)
СпеÑобознаÑÐµÐ½Ð¸Ñ Ñимволов Ð²Ð²ÐµÐ´ÐµÐ½Ñ Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¾Ð±Ð»ÐµÐ³ÑиÑÑ Ð²Ð²Ð¾Ð´ в RE непеÑаÑаемÑÑ Ð¸ дÑÑÐ³Ð¸Ñ Ð½ÐµÑдобнÑÑ Ñимволов. Ðни пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð² ТаблиÑе 9.18.
ÐÐ¾Ð´Ñ ÐºÐ»Ð°ÑÑов пÑедÑÑавлÑÑÑ Ñобой кÑаÑкий ÑпоÑоб запиÑи имÑн некоÑоÑÑÑ ÑаÑпÑоÑÑÑанÑннÑÑ ÐºÐ»Ð°ÑÑов Ñимволов. Ðни пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 9.19.
СпеÑÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¾Ð³ÑаниÑений обознаÑаÑÑ Ð¾Ð³ÑаниÑениÑ, коÑоÑÑм пÑи Ñовпадении опÑеделÑннÑÑ ÑÑловий ÑооÑвеÑÑÑвÑÐµÑ Ð¿ÑÑÑÐ°Ñ ÑÑÑока. Ðни пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 9.20.
СÑÑлка назад (\n) ÑооÑвеÑÑÑвÑÐµÑ Ñой же ÑÑÑоке, какой ÑооÑвеÑÑÑвовало пÑедÑдÑÑее подвÑÑажение в ÑкобкаÑ
под номеÑом n (Ñм. ТаблиÑÑ 9.21). ÐапÑимеÑ, ([bc])\1 ÑооÑвеÑÑÑвÑÐµÑ bb или cc, но не bc или cb. ÐÑо подвÑÑажение должно полноÑÑÑÑ Ð¿ÑедÑеÑÑвоваÑÑ ÑÑÑлке назад в RE. ÐÑмеÑÑÑÑÑÑ Ð¿Ð¾Ð´Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² поÑÑдке ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ñ
оÑкÑÑваÑÑиÑ
Ñкобок. ÐÑи ÑÑом Ñкобки без заÑ
ваÑа иÑклÑÑаÑÑÑÑ Ð¸Ð· ÑаÑÑмоÑÑениÑ.
ТаблиÑа 9.18. СпеÑобознаÑÐµÐ½Ð¸Ñ Ñимволов в ÑегÑлÑÑнÑÑ Ð²ÑÑажениÑÑ
| СпеÑÑимвол | ÐпиÑание |
|---|---|
\a | Ñимвол звонка, как в C |
\b | Ñимвол «забой», как в C |
\B | Ñиноним Ð´Ð»Ñ Ð¾Ð±ÑаÑной коÑой ÑеÑÑÑ (\), ÑокÑаÑаÑÑий поÑÑебноÑÑÑ Ð² дÑблиÑовании ÑÑого Ñимвола |
\cX | (где X â лÑбой Ñимвол) Ñимвол, младÑие 5 Ð±Ð¸Ñ ÐºÐ¾ÑоÑого Ñе же, ÑÑо и Ñ X, а оÑÑалÑнÑе ÑÐ°Ð²Ð½Ñ 0 |
\e | Ñимвол, опÑеделÑннÑй в поÑледоваÑелÑноÑÑи ÑоÑÑиÑовки Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ ESC, либо, еÑли Ñаковой не опÑеделÑн, Ñимвол Ñ Ð²Ð¾ÑÑмеÑиÑнÑм знаÑением 033 |
\f | подаÑа ÑоÑмÑ, как в C |
\n | Ð½Ð¾Ð²Ð°Ñ ÑÑÑока, как в C |
\r | возвÑÐ°Ñ ÐºÐ°ÑеÑки, как в C |
\t | гоÑизонÑалÑÐ½Ð°Ñ ÑабÑлÑÑиÑ, как в C |
\uwxyz | (где wxyz Ñовно ÑеÑÑÑе ÑеÑÑнадÑаÑеÑиÑнÑе ÑиÑÑÑ) Ñимвол Ñ ÑеÑÑнадÑаÑеÑиÑнÑм кодом 0xwxyz |
\Ustuvwxyz | (где stuvwxyz Ñовно воÑÐµÐ¼Ñ ÑеÑÑнадÑаÑеÑиÑнÑÑ
ÑиÑÑ) Ñимвол Ñ ÑеÑÑнадÑаÑеÑиÑнÑм кодом 0xstuvwxyz |
\v | веÑÑикалÑÐ½Ð°Ñ ÑабÑлÑÑиÑ, как в C |
\xhhh | (где hhh â неÑколÑко ÑеÑÑнадÑаÑеÑиÑнÑÑ
ÑиÑÑ) Ñимвол Ñ ÑеÑÑнадÑаÑеÑиÑнÑм кодом 0xhhh (Ñимвол вÑегда один вне завиÑимоÑÑи Ð¾Ñ ÑиÑла ÑеÑÑнадÑаÑеÑиÑнÑÑ
ÑиÑÑ) |
\0 | Ñимвол Ñ ÐºÐ¾Ð´Ð¾Ð¼ 0 (нÑлевой байÑ) |
\xy | (где xy â Ñовно две воÑÑмеÑиÑнÑÑ
ÑиÑÑÑ, не ÑÑÑлка назад) Ñимвол Ñ Ð²Ð¾ÑÑмеÑиÑнÑм кодом 0xy |
\xyz | (где xyz â Ñовно ÑÑи воÑÑмеÑиÑнÑÑ
ÑиÑÑÑ, не ÑÑÑлка назад) Ñимвол Ñ Ð²Ð¾ÑÑмеÑиÑнÑм кодом 0xyz |
ШеÑÑнадÑаÑеÑиÑнÑе ÑиÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑваÑÑÑÑ Ñимволами 0-9 и a-f или A-F. ÐоÑÑмеÑиÑнÑе ÑиÑÑÑ â ÑиÑÑÑ Ð¾Ñ 0 до 7.
СпеÑпоÑледоваÑелÑноÑÑи Ñ ÑиÑловÑми кодами, задаÑÑими знаÑÐµÐ½Ð¸Ñ Ð²Ð½Ðµ диапазона ASCII (0-127), воÑпÑинимаÑÑÑÑ Ð¿Ð¾-ÑÐ°Ð·Ð½Ð¾Ð¼Ñ Ð² завиÑимоÑÑи Ð¾Ñ ÐºÐ¾Ð´Ð¸Ñовки Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
. Ðогда база даннÑÑ
Ð¸Ð¼ÐµÐµÑ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²ÐºÑ UTF-8, ÑпеÑкод ÑавнознаÑен позиÑии Ñимвола в Unicode, напÑимеÑ, \u1234 обознаÑÐ°ÐµÑ Ñимвол U+1234. ÐÐ»Ñ Ð´ÑÑгиÑ
многобайÑнÑÑ
кодиÑовок ÑпеÑпоÑледоваÑелÑноÑÑи обÑÑно пÑоÑÑо задаÑÑ ÑеÑÐ¸Ñ Ð±Ð°Ð¹Ñ, опÑеделÑÑÑиÑ
Ñимвол. ÐÑли в кодиÑовке Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
оÑÑÑÑÑÑвÑÐµÑ Ñимвол, заданнÑй ÑпеÑпоÑледоваÑелÑноÑÑÑÑ, оÑибки не бÑдеÑ, но и никакие даннÑе не бÑдÑÑ ÐµÐ¹ ÑооÑвеÑÑÑвоваÑÑ.
СимволÑ, пеÑеданнÑе ÑпеÑобознаÑением, вÑегда воÑпÑинимаÑÑÑÑ ÐºÐ°Ðº обÑÑнÑе ÑимволÑ. ÐапÑимеÑ, \135 кодиÑÑÐµÑ ] в ASCII, но ÑпеÑпоÑледоваÑелÑноÑÑÑ \135 не бÑÐ´ÐµÑ Ð·Ð°ÐºÑÑваÑÑ Ð²ÑÑажение в квадÑаÑнÑÑ
ÑкобкаÑ
.
ТаблиÑа 9.19. СпеÑÐºÐ¾Ð´Ñ ÐºÐ»Ð°ÑÑов в ÑегÑлÑÑнÑÑ Ð²ÑÑажениÑÑ
| СпеÑÑимвол | ÐпиÑание |
|---|---|
\d | [[:digit:]] |
\s | [[:space:]] |
\w | [[:alnum:]_] (подÑÑÑкивание Ñакже вклÑÑаеÑÑÑ) |
\D | [^[:digit:]] |
\S | [^[:space:]] |
\W | [^[:alnum:]_] (подÑÑÑкивание Ñакже вклÑÑаеÑÑÑ) |
РвÑÑажениÑÑ
в квадÑаÑнÑÑ
ÑкобкаÑ
ÑпеÑÑÐ¸Ð¼Ð²Ð¾Ð»Ñ \d, \s и \w ÑеÑÑÑÑ Ñвои внеÑние квадÑаÑнÑе Ñкобки, а \D, \S и \W â недопÑÑÑимÑ. (Так ÑÑо, напÑÐ¸Ð¼ÐµÑ Ð·Ð°Ð¿Ð¸ÑÑ [a-c\d] ÑавнознаÑна [a-c[:digit:]]. РзапиÑÑ [a-c\D], коÑоÑÐ°Ñ Ð±Ñла Ð±Ñ ÑавнознаÑна [a-c^[:digit:]], â недопÑÑÑима.)
ТаблиÑа 9.20. СпеÑÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¾Ð³ÑаниÑений в ÑегÑлÑÑнÑÑ Ð²ÑÑажений
| СпеÑÑимвол | ÐпиÑание |
|---|---|
\A | ÑооÑвеÑÑÑвÑÐµÑ ÑолÑко наÑÐ°Ð»Ñ ÑÑÑоки (Ñем ÑÑо оÑлиÑаеÑÑÑ Ð¾Ñ ^, опиÑано в ÐодÑазделе 9.7.3.5) |
\m | ÑооÑвеÑÑÑвÑÐµÑ ÑолÑко наÑÐ°Ð»Ñ Ñлова |
\M | ÑооÑвеÑÑÑвÑÐµÑ ÑолÑко конÑÑ Ñлова |
\y | ÑооÑвеÑÑÑвÑÐµÑ ÑолÑко наÑÐ°Ð»Ñ Ð¸Ð»Ð¸ конÑÑ Ñлова |
\Y | ÑооÑвеÑÑÑвÑÐµÑ ÑолÑко Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ в наÑале и не в конÑе Ñлова |
\Z | ÑооÑвеÑÑÑвÑÐµÑ ÑолÑко конÑÑ ÑÑÑоки (Ñем ÑÑо оÑлиÑаеÑÑÑ Ð¾Ñ $, опиÑано в ÐодÑазделе 9.7.3.5) |
ÐпÑеделением Ñлова здеÑÑ ÑлÑÐ¶Ð¸Ñ Ñо же, ÑÑо бÑло пÑиведено вÑÑе в опиÑании [[:<:]] и [[:>:]]. РквадÑаÑнÑÑ
ÑкобкаÑ
ÑпеÑÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¾Ð³ÑаниÑений не допÑÑкаÑÑÑÑ.
ТаблиÑа 9.21. СÑÑлки назад в ÑегÑлÑÑнÑÑ Ð²ÑÑажениÑÑ
| СпеÑÑимвол | ÐпиÑание |
|---|---|
\m | (где m â ÑиÑÑа, оÑлиÑÐ½Ð°Ñ Ð¾Ñ 0) â ÑÑÑлка назад на подвÑÑажение под номеÑом m |
\mnn | (где m â ÑиÑÑа, оÑлиÑÐ½Ð°Ñ Ð¾Ñ 0, а nn â еÑÑ Ð½ÐµÑколÑко ÑиÑÑ Ñ Ð´ÐµÑÑÑиÑнÑм знаÑением mnn, не пÑевÑÑаÑÑим ÑиÑло закÑÑÑÑÑ
до ÑÑого Ñкобок Ñ Ð·Ð°Ñ
ваÑом) ÑÑÑлка назад на подвÑÑажение под номеÑом mnn |
ÐÑимеÑание
РегÑлÑÑнÑм вÑÑажениÑм пÑиÑÑÑа неоднознаÑноÑÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð²Ð¾ÑÑмеÑиÑнÑми кодами Ñимволов и ÑÑÑлками назад, коÑоÑÐ°Ñ ÑазÑеÑаеÑÑÑ ÑледÑÑÑим обÑазом (ÑÑо ÑпоминалоÑÑ Ð²ÑÑе). ÐедÑÑий Ð½Ð¾Ð»Ñ Ð²Ñегда ÑÑиÑаеÑÑÑ Ð¿Ñизнаком воÑÑмеÑиÑной поÑледоваÑелÑноÑÑи. ÐдинÑÑÐ²ÐµÐ½Ð½Ð°Ñ ÑиÑÑа, оÑлиÑÐ½Ð°Ñ Ð¾Ñ 0, за коÑоÑой не ÑледÑÐµÑ ÐµÑÑ Ð¾Ð´Ð½Ð° ÑиÑÑа, вÑегда воÑпÑинимаеÑÑÑ ÐºÐ°Ðº ÑÑÑлка назад. ÐоÑледоваÑелÑноÑÑÑ Ð¸Ð· неÑколÑÐºÐ¸Ñ ÑиÑÑ, коÑоÑÐ°Ñ Ð½Ð°ÑинаеÑÑÑ Ð½Ðµ Ñ 0, воÑпÑинимаеÑÑÑ ÐºÐ°Ðº ÑÑÑлка назад, еÑли она идÑÑ Ð·Ð° Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑим подвÑÑажением (Ñ. е. ÑиÑло оказÑваеÑÑÑ Ð² диапазоне, допÑÑÑимом Ð´Ð»Ñ ÑÑÑлки назад), в пÑоÑивном ÑлÑÑае она воÑпÑинимаеÑÑÑ ÐºÐ°Ðº воÑÑмеÑиÑное ÑиÑло.
9.7.3.4. ÐеÑаÑинÑакÑÐ¸Ñ ÑегÑлÑÑнÑÑ Ð²ÑÑажений
Рдополнение к оÑÐ½Ð¾Ð²Ð½Ð¾Ð¼Ñ ÑинÑакÑиÑÑ, опиÑÐ°Ð½Ð½Ð¾Ð¼Ñ Ð²ÑÑе, можно иÑполÑзоваÑÑ Ñакже неÑколÑко оÑобÑÑ ÑоÑм и ÑазнообÑазнÑе ÑинÑакÑиÑеÑкие ÑдобÑÑва.
РегÑлÑÑное вÑÑажение Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°ÑинаÑÑÑÑ Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ из двÑÑ
ÑпеÑиалÑнÑÑ
пÑеÑикÑов Ñежима. ÐÑли RE наÑинаеÑÑÑ Ñ ***:, его пÑодолжение ÑаÑÑмаÑÑиваеÑÑÑ ÐºÐ°Ðº ARE. (Ð Postgres Pro ÑÑо обÑÑно не Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°ÑениÑ, Ñак как ÑегÑлÑÑнÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð²Ð¾ÑпÑинимаÑÑÑÑ ÐºÐ°Ðº ARE по ÑмолÑаниÑ; но ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾, когда паÑамеÑÑ Ñлаги ÑÑнкÑий regex вклÑÑÐ°ÐµÑ Ñежим ERE или BRE.) ÐÑли RE наÑинаеÑÑÑ Ñ ***=, его пÑодолжение воÑпÑинимаеÑÑÑ ÐºÐ°Ðº обÑÑÐ½Ð°Ñ ÑекÑÑÐ¾Ð²Ð°Ñ ÑÑÑока, вÑе его ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð²Ð¾ÑпÑинимаÑÑÑÑ Ð±ÑквалÑно.
ARE Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°ÑинаÑÑÑÑ Ñо вÑÑÑоеннÑÑ
паÑамеÑÑов: поÑледоваÑелÑноÑÑи (?xyz) (где xyz â один или неÑколÑко алÑавиÑно-ÑиÑÑовÑÑ
Ñимволов), опÑеделÑÑÑиÑ
паÑамеÑÑÑ Ð¾ÑÑалÑного ÑегÑлÑÑного вÑÑажениÑ. ÐÑи паÑамеÑÑÑ Ð¿ÐµÑеопÑеделÑÑÑ Ð»ÑбÑе Ñанее опÑеделÑннÑе паÑамеÑÑÑ, в ÑаÑÑноÑÑи они могÑÑ Ð¿ÐµÑеопÑеделиÑÑ Ñежим ÑÑвÑÑвиÑелÑноÑÑи к ÑегиÑÑÑÑ, подÑазÑмеваемÑй Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑоÑа regex, или паÑамеÑÑ Ñлаги ÑÑнкÑии regex. ÐопÑÑÑимÑе бÑÐºÐ²Ñ Ð¿Ð°ÑамеÑÑов Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð² ТаблиÑе 9.22. ÐамеÑÑÑе, ÑÑо Ñе же бÑÐºÐ²Ñ Ð¸ÑполÑзÑÑÑÑÑ Ð² паÑамеÑÑе Ñлаги ÑÑнкÑий regex.
ТаблиÑа 9.22. ÐÑÐºÐ²Ñ Ð²ÑÑÑоеннÑÑ Ð¿Ð°ÑамеÑÑов ARE
| ÐаÑамеÑÑ | ÐпиÑание |
|---|---|
b | пÑодолжение ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ â BRE |
c | поиÑк ÑооÑвеÑÑÑвий Ñ ÑÑÑÑом ÑегиÑÑÑа (пеÑеопÑеделÑÐµÑ Ñип опеÑаÑоÑа) |
e | пÑодолжение RE â ERE |
i | поиÑк ÑооÑвеÑÑÑвий без ÑÑÑÑа ÑегиÑÑÑа (Ñм. ÐодÑаздел 9.7.3.5) (пеÑеопÑеделÑÐµÑ Ñип опеÑаÑоÑа) |
m | иÑÑоÑиÑеÑки ÑложивÑийÑÑ Ñиноним n |
n | поиÑк ÑооÑвеÑÑÑвий Ñ ÑÑÑÑом пеÑевода ÑÑÑок (Ñм. ÐодÑаздел 9.7.3.5) |
p | пеÑÐµÐ²Ð¾Ð´Ñ ÑÑÑок ÑÑиÑÑваÑÑÑÑ ÑаÑÑиÑно (Ñм. ÐодÑаздел 9.7.3.5) |
q | пÑодолжение ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ â обÑÑÐ½Ð°Ñ ÑÑÑока («в кавÑÑÐºÐ°Ñ Â»), ÑодеÑжимое коÑоÑой воÑпÑинимаеÑÑÑ Ð±ÑквалÑно |
s | поиÑк ÑооÑвеÑÑÑвий без ÑÑÑÑа пеÑевода ÑÑÑок (по ÑмолÑаниÑ) |
t | компакÑнÑй ÑинÑакÑÐ¸Ñ (по ÑмолÑаниÑ; Ñм. ниже) |
w | пеÑÐµÐ²Ð¾Ð´Ñ ÑÑÑок ÑÑиÑÑваÑÑÑÑ ÑаÑÑиÑно, но в дÑÑгом, «ÑÑÑанном» Ñежиме (Ñм. ÐодÑаздел 9.7.3.5) |
x | ÑазвÑÑнÑÑÑй ÑинÑакÑÐ¸Ñ (Ñм. ниже) |
ÐнедÑÑннÑе паÑамеÑÑÑ Ð½Ð°ÑинаÑÑ Ð´ÐµÐ¹ÑÑвоваÑÑ ÑÑÐ°Ð·Ñ Ð¿Ð¾Ñле Ñкобки ), завеÑÑаÑÑей иÑ
поÑледоваÑелÑноÑÑÑ. Ðни могÑÑ Ð½Ð°Ñ
одиÑÑÑÑ ÑолÑко в наÑале ARE (поÑле ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ ***:, еÑли оно пÑиÑÑÑÑÑвÑеÑ).
Ðомимо обÑÑного (компакÑного) ÑинÑакÑиÑа RE, в коÑоÑом имеÑÑ Ð·Ð½Ð°Ñение вÑе ÑимволÑ, поддеÑживаеÑÑÑ Ñакже ÑазвÑÑнÑÑÑй ÑинÑакÑиÑ, вклÑÑиÑÑ ÐºÐ¾ÑоÑÑй можно Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð²ÑÑÑоенного паÑамеÑÑа x. Ð ÑазвÑÑнÑÑом ÑинÑакÑиÑе игноÑиÑÑÑÑÑÑ Ð¿ÑобелÑнÑе ÑимволÑ, а Ñакже вÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¾Ñ # до конÑа ÑÑÑоки (или конÑа RE). ÐÑо позволÑÐµÑ ÑазделÑÑÑ RE на ÑÑÑоки и добавлÑÑÑ Ð² него комменÑаÑии. Ðо еÑÑÑ ÑÑи иÑклÑÑениÑ:
пÑобелÑнÑй Ñимвол или
#, за коÑоÑÑм ÑледÑеÑ\, ÑÐ¾Ñ ÑанÑеÑÑÑпÑобелÑнÑй Ñимвол или
#внÑÑÑи вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² квадÑаÑнÑÑ ÑÐºÐ¾Ð±ÐºÐ°Ñ ÑÐ¾Ñ ÑанÑеÑÑÑпÑобелÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¸ комменÑаÑии не могÑÑ Ð¿ÑиÑÑÑÑÑвоваÑÑ Ð² ÑоÑÑавнÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ð°Ñ , напÑимеÑ, в
(?:
Рданном конÑекÑÑе пÑобелÑнÑми Ñимволами ÑÑиÑаÑÑÑÑ Ð¿Ñобел, ÑабÑлÑÑиÑ, пеÑевод ÑÑÑоки и лÑбой дÑÑгой Ñимвол, оÑноÑÑÑийÑÑ Ðº клаÑÑÑ Ñимволов space.
РнаконеÑ, в ARE поÑледоваÑелÑноÑÑÑ (?#ttt) (где ttt â лÑбой ÑекÑÑ, не ÑодеÑжаÑий )) вне квадÑаÑнÑÑ
Ñкобок Ñакже ÑÑиÑаеÑÑÑ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑием и полноÑÑÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑеÑÑÑ. ÐÑи ÑÑом она Ñак же не Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°Ñ
одиÑÑÑÑ Ð²Ð½ÑÑÑи ÑоÑÑавнÑÑ
Ñимволов, ÑакиÑ
как (?:. ÐÑи комменÑаÑии в болÑÑей ÑÑепени иÑÑоÑиÑеÑкое наÑледие, Ñем полезное ÑÑедÑÑво; они ÑÑиÑаÑÑÑÑ ÑÑÑаÑевÑими, а вмеÑÑо ниÑ
ÑекомендÑеÑÑÑ Ð¸ÑполÑзоваÑÑ ÑазвÑÑнÑÑÑй ÑинÑакÑиÑ.
Ðи одно из ÑÑиÑ
ÑаÑÑиÑений меÑаÑинÑакÑиÑа не бÑÐ´ÐµÑ ÑабоÑаÑÑ, еÑли вÑÑажение наÑинаеÑÑÑ Ñ Ð¿ÑеÑикÑа ***=, поÑле коÑоÑого ÑÑÑока воÑпÑинимаеÑÑÑ Ð±ÑквалÑно, а не как RE.
9.7.3.5. ÐÑавила ÑооÑвеÑÑÑÐ²Ð¸Ñ ÑегÑлÑÑнÑм вÑÑажениÑм
Ð ÑлÑÑае, когда RE Ð¼Ð¾Ð¶ÐµÑ ÑооÑвеÑÑÑвоваÑÑ Ð±Ð¾Ð»ÐµÐµ Ñем одной подÑÑÑоке в заданной ÑÑÑоке, ÑооÑвеÑÑÑвÑÑÑей RE ÑÑиÑаеÑÑÑ Ð¿Ð¾Ð´ÑÑÑока, коÑоÑÐ°Ñ Ð½Ð°ÑинаеÑÑÑ Ð² ней пеÑвой. ÐÑли к данной позиÑии подобнÑÑ ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ Ð¿Ð¾Ð´ÑÑÑок оказÑваеÑÑÑ Ð½ÐµÑколÑко, из Ð½Ð¸Ñ Ð²ÑбиÑаеÑÑÑ Ð»Ð¸Ð±Ð¾ ÑÐ°Ð¼Ð°Ñ Ð´Ð»Ð¸Ð½Ð½Ð°Ñ, либо ÑÐ°Ð¼Ð°Ñ ÐºÐ¾ÑоÑÐºÐ°Ñ Ð¸Ð· возможнÑÑ , в завиÑимоÑÑи Ð¾Ñ Ñого, какой Ñежим вÑбÑан в RE: жаднÑй или не жаднÑй.
Ðде жаднÑй или не жаднÑй Ñ Ð°ÑакÑÐµÑ RE опÑеделÑеÑÑÑ Ð¿Ð¾ ÑледÑÑÑим пÑавилам:
ÐолÑÑинÑÑво аÑомов и вÑе огÑаниÑÐµÐ½Ð¸Ñ Ð½Ðµ имеÑÑ Ð¿Ñизнака жадноÑÑи (Ñак как они вÑÑ Ñавно не могÑÑ ÑооÑвеÑÑÑвоваÑÑ Ð¿Ð¾Ð´ÑÑÑокам Ñазного ÑоÑÑава).
Скобки, окÑÑжаÑÑие RE, не влиÑÑÑ Ð½Ð° его «жадноÑÑÑ».
ÐÑом Ñ Ð¾Ð¿ÑеделиÑелем ÑикÑиÑованного колиÑеÑÑва (
{m}или{m}?) Ð¸Ð¼ÐµÐµÑ ÑÑ Ð¶Ðµ Ñ Ð°ÑакÑеÑиÑÑÐ¸ÐºÑ Ð¶Ð°Ð´Ð½Ð¾ÑÑи (или Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ имеÑÑ ÐµÑ), как и Ñам аÑом.ÐÑом Ñ Ð´ÑÑгими обÑÑнÑми опÑеделиÑелÑми колиÑеÑÑва (вклÑÑаÑ
{m,n}, гдеmÑавнÑеÑÑÑn) ÑÑиÑаеÑÑÑ Ð¶Ð°Ð´Ð½Ñм (пÑедпоÑиÑÐ°ÐµÑ ÑооÑвеÑÑÑвие макÑималÑной длинÑ).ÐÑом Ñ Ð½Ðµ жаднÑм опÑеделиÑелем колиÑеÑÑва (вклÑÑаÑ
{m,n}?, гдеmÑавноn) ÑÑиÑаеÑÑÑ Ð½Ðµ жаднÑм (пÑедпоÑиÑÐ°ÐµÑ ÑооÑвеÑÑÑвие минималÑной длинÑ).ÐеÑÐ²Ñ (RE без опеÑаÑоÑа
|на веÑÑ Ð½ÐµÐ¼ ÑÑовне) Ð¸Ð¼ÐµÐµÑ ÑÑ Ð¶Ðµ Ñ Ð°ÑакÑеÑиÑÑÐ¸ÐºÑ Ð¶Ð°Ð´Ð½Ð¾ÑÑи, ÑÑо и пеÑвÑй колиÑеÑÑвеннÑй аÑом в нÑм, имеÑÑий аÑÑибÑÑ Ð¶Ð°Ð´Ð½Ð¾ÑÑи.RE, обÑазованное из двÑÑ Ð¸Ð»Ð¸ более веÑвей, ÑоединÑннÑÑ Ð¾Ð¿ÐµÑаÑоÑом
|, вÑегда ÑÑиÑаеÑÑÑ Ð¶Ð°Ð´Ð½Ñм.
ÐÑи пÑавила ÑвÑзÑваÑÑ Ñ Ð°ÑакÑеÑиÑÑики жадноÑÑи не ÑолÑко Ñ Ð¾ÑделÑнÑми колиÑеÑÑвеннÑми аÑомами, но и Ñ Ð²ÐµÑвÑми и ÑелÑми RE, ÑодеÑжаÑими колиÑеÑÑвеннÑе аÑомÑ. ÐÑо ознаÑаеÑ, ÑÑо пÑи ÑопоÑÑавлении веÑÐ²Ñ Ð¸Ð»Ð¸ Ñелое RE Ð¼Ð¾Ð¶ÐµÑ ÑооÑвеÑÑÑвоваÑÑ Ð¼Ð°ÐºÑималÑно длинной или коÑоÑкой подÑÑÑоке в Ñелом. Ðогда опÑеделена длина вÑего ÑооÑвеÑÑÑвиÑ, ÑаÑÑÑ ÐµÐ³Ð¾, ÑооÑвеÑÑÑвÑÑÑÐ°Ñ ÐºÐ¾Ð½ÐºÑеÑÐ½Ð¾Ð¼Ñ Ð¿Ð¾Ð´Ð²ÑÑажениÑ, опÑеделÑеÑÑÑ Ñ ÑÑÑÑом Ñ Ð°ÑакÑеÑиÑÑики жадноÑÑи Ð´Ð»Ñ ÑÑого подвÑÑажениÑ, пÑи ÑÑом подвÑÑажениÑ, наÑинаÑÑиеÑÑ Ð² RE ÑанÑÑе, имеÑÑ Ð±Ð¾Ð»ÑÑий пÑиоÑиÑеÑ, Ñем ÑледÑÑÑие за ними.
ÐÑо иллÑÑÑÑиÑÑÐµÑ ÑледÑÑÑий пÑимеÑ:
SELECT SUBSTRING('XY1234Z', 'Y*([0-9]{1,3})');
РезÑлÑÑаÑ: 123
SELECT SUBSTRING('XY1234Z', 'Y*?([0-9]{1,3})');
РезÑлÑÑаÑ: 1
РпеÑвом ÑлÑÑае RE в Ñелом жадное, Ñак как жаднÑм ÑвлÑеÑÑÑ Ð°Ñом Y*. СооÑвеÑÑÑвие ÐµÐ¼Ñ Ð½Ð°ÑинаеÑÑÑ Ñ Ð±ÑÐºÐ²Ñ Y и оно вклÑÑÐ°ÐµÑ Ð¿Ð¾Ð´ÑÑÑÐ¾ÐºÑ Ð¼Ð°ÐºÑималÑной Ð´Ð»Ð¸Ð½Ñ Ñ ÑÑого меÑÑа, Ñ. е. подÑÑÑÐ¾ÐºÑ Y123. РезÑлÑÑÐ°Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ â ÐµÑ ÑаÑÑÑ, ÑооÑвеÑÑÑвÑÑÑÐ°Ñ Ð¿Ð¾Ð´Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² ÑкобкаÑ
, Ñ. е. 123. Ðо вÑоÑом ÑлÑÑае, RE в Ñелом наÑледÑÐµÑ Ð½Ðµ жаднÑй Ñ
аÑакÑÐµÑ Ð¾Ñ Ð°Ñома Y*?. СооÑвеÑÑÑвие ÐµÐ¼Ñ Ñак же наÑинаеÑÑÑ Ñ Y, но вклÑÑÐ°ÐµÑ Ð¾Ð½Ð¾ подÑÑÑÐ¾ÐºÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»Ñной Ð´Ð»Ð¸Ð½Ñ Ñ ÑÑого меÑÑа, Ñ. е. Y1. Ð Ñ
оÑÑ Ð¿Ð¾Ð´Ð²ÑÑажение [0-9]{1,3} Ð¸Ð¼ÐµÐµÑ Ð¶Ð°Ð´Ð½Ñй Ñ
аÑакÑеÑ, оно не Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð²Ð»Ð¸ÑÑÑ Ð½Ð° вÑÐ±Ð¾Ñ Ð´Ð»Ð¸Ð½Ñ ÑооÑвеÑÑÑÐ²Ð¸Ñ Ð² Ñелом, поÑÑÐ¾Ð¼Ñ ÐµÐ¼Ñ Ð¾ÑÑаÑÑÑÑ ÑолÑко подÑÑÑока 1.
ÐÑÑгими Ñловами, когда RE ÑодеÑÐ¶Ð¸Ñ Ð¸ жаднÑе, и не жаднÑе подвÑÑажениÑ, вÑÑ ÑооÑвеÑÑÑвие бÑÐ´ÐµÑ Ð¼Ð°ÐºÑималÑно длиннÑм или коÑоÑким в завиÑимоÑÑи Ð¾Ñ Ñ Ð°ÑакÑеÑиÑÑики вÑего RE. ХаÑакÑеÑиÑÑики, ÑвÑзаннÑе Ñ Ð¿Ð¾Ð´Ð²ÑÑажениÑми, влиÑÑÑ ÑолÑко на Ñо, какÑÑ ÑаÑÑÑ Ð¿Ð¾Ð´ÑÑÑоки Ð¼Ð¾Ð¶ÐµÑ Â«Ð¿Ð¾Ð³Ð»Ð¾ÑиÑÑ» одно подвÑÑажение оÑноÑиÑелÑно дÑÑгого.
ЧÑÐ¾Ð±Ñ Ñвно пÑидаÑÑ Ñ
аÑакÑеÑиÑÑÐ¸ÐºÑ Â«Ð¶Ð°Ð´Ð½Ð¾ÑÑи» или «нежадноÑÑи» подвÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ вÑÐµÐ¼Ñ RE, можно иÑполÑзоваÑÑ Ð¾Ð¿ÑеделиÑели {1,1} и {1,1}?, ÑооÑвеÑÑÑвенно. ÐÑо полезно, когда вам нÑжно, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÑÐ°Ñ Ñ
аÑакÑеÑиÑÑика жадноÑÑи RE оÑлиÑалаÑÑ Ð¾Ñ Ñой, ÑÑо вÑÑÐµÐºÐ°ÐµÑ Ð¸Ð· его ÑлеменÑов. ÐапÑимеÑ, пÑедположим, ÑÑо Ð²Ñ Ð¿ÑÑаеÑеÑÑ Ð²ÑделиÑÑ Ð¸Ð· ÑÑÑоки, ÑодеÑжаÑей неÑколÑко ÑиÑÑ, ÑÑи ÑиÑÑÑ Ð¸ ÑаÑÑи до и поÑле ниÑ
. Ðожно попÑÑаÑÑÑÑ ÑделаÑÑ ÑÑо Ñак:
SELECT regexp_matches('abc01234xyz', '(.*)(\d+)(.*)');
РезÑлÑÑаÑ: {abc0123,4,xyz}
Ðо ÑÑо не бÑÐ´ÐµÑ ÑабоÑаÑÑ: пеÑÐ²Ð°Ñ Ð³ÑÑппа .* â «жаднаÑ», она «ÑÑеÑÑ» вÑÑ, ÑÑо ÑможеÑ, оÑÑавлÑÑ Ð´Ð»Ñ ÑооÑвеÑÑÑÐ²Ð¸Ñ \d+ ÑолÑко поÑледнÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ, Ñо еÑÑÑ Ð¿Ð¾ÑледнÑÑ ÑиÑÑÑ. Ðожно попÑÑаÑÑÑÑ ÑделаÑÑ Ð·Ð°Ð¿ÑÐ¾Ñ Â«Ð½ÐµÐ¶Ð°Ð´Ð½Ñм»:
SELECT regexp_matches('abc01234xyz', '(.*?)(\d+)(.*)');
РезÑлÑÑаÑ: {abc,0,""}
Ð ÑÑо не бÑÐ´ÐµÑ ÑабоÑаÑÑ, Ñак ÑепеÑÑ Ð²ÐµÑÑ RE в Ñелом ÑÑал нежаднÑм, и вÑе ÑооÑвеÑÑÑÐ²Ð¸Ñ Ð·Ð°Ð²ÐµÑÑаÑÑÑÑ ÐºÐ°Ðº можно ÑанÑÑе. Ðо Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ полÑÑиÑÑ Ð½ÑжнÑй ÑезÑлÑÑаÑ, Ñвно Ñделав жаднÑм вÑÑ RE:
SELECT regexp_matches('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}');
РезÑлÑÑаÑ: {abc,01234,xyz}
УпÑавление обÑей Ñ Ð°ÑакÑеÑиÑÑикой «жадноÑÑи» RE незавиÑимо Ð¾Ñ Â«Ð¶Ð°Ð´Ð½Ð¾ÑÑи» его компоненÑов даÑÑ Ð±Ð¾Ð»ÑÑÑÑ Ð³Ð¸Ð±ÐºÐ¾ÑÑÑ Ð² опиÑании Ñаблонов пеÑеменной длинÑ.
ÐÑи опÑеделении более длинного или более коÑоÑкого ÑооÑвеÑÑÑÐ²Ð¸Ñ Ð´Ð»Ð¸Ð½Ñ ÑооÑвеÑÑÑвий опÑеделÑÑÑÑÑ Ð² ÑимволаÑ
, а не в ÑлеменÑаÑ
ÑоÑÑиÑовки. ÐÑÑÑÐ°Ñ ÑÑÑока ÑÑиÑаеÑÑÑ Ð´Ð»Ð¸Ð½Ð½ÐµÐµ, Ñем оÑÑÑÑÑÑвие ÑооÑвеÑÑÑвиÑ. ÐапÑимеÑ, вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ bb* ÑооÑвеÑÑÑвÑÑÑ ÑÑи Ñимвола в ÑеÑедине ÑÑÑоки abbbc, вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ (week|wee)(night|knights) â вÑе деÑÑÑÑ Ñимволов weeknights; когда вÑÑажение (.*).* ÑопоÑÑавлÑеÑÑÑ Ñо ÑÑÑокой abc, подвÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² ÑкобкаÑ
ÑооÑвеÑÑÑвÑÑÑ Ð²Ñе ÑÑи Ñимвола; а когда (a*)* ÑопоÑÑавлÑеÑÑÑ Ñо ÑÑÑокой bc, Ñо и RE в Ñелом, и подÑÑÑоке в ÑкобкаÑ
ÑооÑвеÑÑÑвÑÐµÑ Ð¿ÑÑÑÐ°Ñ ÑÑÑока.
ÐгноÑиÑование ÑегиÑÑÑа Ñимволов даÑÑ Ð¿ÑакÑиÑеÑки ÑÐ¾Ñ Ð¶Ðµ ÑÑÑекÑ, как еÑли Ð±Ñ Ð² алÑавиÑе иÑÑезли ÑазлиÑÐ¸Ñ Ð¿ÑопиÑнÑÑ
и ÑÑÑоÑнÑÑ
бÑкв. ÐÑли бÑква, ÑÑÑеÑÑвÑÑÑÐ°Ñ Ð¸ в веÑÑ
нем, и в нижнем ÑегиÑÑÑе, ÑигÑÑиÑÑÐµÑ Ð²Ð½Ðµ квадÑаÑнÑÑ
Ñкобок как обÑÑнÑй Ñимвол, она по ÑÑÑи пÑеобÑазÑеÑÑÑ Ð² вÑÑажение в квадÑаÑнÑÑ
ÑкобкаÑ
, ÑодеÑжаÑее оба ваÑианÑа, напÑÐ¸Ð¼ÐµÑ x ÑÑановиÑÑÑ [xX]. ÐÑли же она ÑигÑÑиÑÑÐµÑ Ð² вÑÑажении в квадÑаÑнÑÑ
ÑкобкаÑ
, в ÑÑо вÑÑажение добавлÑÑÑÑÑ Ð²Ñе ÐµÑ Ð²Ð°ÑианÑÑ, напÑÐ¸Ð¼ÐµÑ [x] ÑÑановиÑÑÑ [xX], а [^x] â [^xX].
Ðогда вклÑÑÑн Ñежим ÑÑÑÑа пеÑевода ÑÑÑок, аÑом . и вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² квадÑаÑнÑÑ
ÑкобкаÑ
Ñ ^ никогда не бÑдÑÑ ÑооÑвеÑÑÑвоваÑÑ Ñимволам конÑа ÑÑÑоки (Ñак ÑÑо ÑооÑвеÑÑÑÐ²Ð¸Ñ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð° не бÑдÑÑ Ð¿ÐµÑеÑекаÑÑ Ð³ÑаниÑÑ ÑÑÑок, еÑли в RE Ð½ÐµÑ ÑвнÑÑ
Ñказаний на ÑÑи ÑимволÑ), а ^ и $ бÑдÑÑ ÑооÑвеÑÑÑвоваÑÑ Ð¿ÑÑÑой подÑÑÑоке не ÑолÑко в наÑале и конÑе вÑего ÑекÑÑа, но и в наÑале и конÑе каждой оÑделÑной его ÑÑÑоки. Ðднако ÑпеÑÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ARE \A и \Z по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð±ÑдÑÑ ÑооÑвеÑÑÑвоваÑÑ ÑолÑко наÑÐ°Ð»Ñ Ð¸ конÑÑ Ð²Ñего ÑекÑÑа.
Ð Ñежиме, когда пеÑÐµÐ²Ð¾Ð´Ñ ÑÑÑок ÑÑиÑÑваÑÑÑÑ ÑаÑÑиÑно, оÑобÑй ÑмÑÑл пеÑевод ÑÑÑок Ð¸Ð¼ÐµÐµÑ Ð´Ð»Ñ Ð°Ñома . и вÑÑажений в квадÑаÑнÑÑ
ÑкобкаÑ
, но не Ð´Ð»Ñ ^ и $.
РобÑаÑном ÑаÑÑиÑном Ñежиме, пеÑевод ÑÑÑок Ð¸Ð¼ÐµÐµÑ Ð¾ÑобÑй ÑмÑÑл Ð´Ð»Ñ ^ и $, как и в Ñежиме Ñ ÑÑÑÑом пеÑевода ÑÑÑок, но не Ð´Ð»Ñ . и вÑÑажений в квадÑаÑнÑÑ
ÑкобкаÑ
. ÐаннÑй Ñежим не оÑÐµÐ½Ñ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½, но ÑÑÑеÑÑвÑÐµÑ Ð´Ð»Ñ ÑиммеÑÑии.
9.7.3.6. ÐÑÐµÐ´ÐµÐ»Ñ Ð¸ ÑовмеÑÑимоÑÑÑ
Ð ÑекÑÑей ÑеализаÑии оÑÑÑÑÑÑвÑÐµÑ ÐºÐ°ÐºÐ¾Ð¹-либо Ñвно заданнÑй пÑедел Ð´Ð»Ð¸Ð½Ñ RE. Ðднако, ÑазÑабаÑÑÐ²Ð°Ñ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ Ð²ÑÑокой ÑÑепени пеÑеноÑимоÑÑи, не ÑледÑÐµÑ Ð¿ÑименÑÑÑ RE длиннее 256 байÑ, Ñак как дÑÑÐ³Ð°Ñ POSIX-ÑовмеÑÑÐ¸Ð¼Ð°Ñ ÑеализаÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑказаÑÑÑÑ Ð¾Ð±ÑабаÑÑваÑÑ Ñакие ÑегÑлÑÑнÑе вÑÑажениÑ.
ÐдинÑÑÐ²ÐµÐ½Ð½Ð°Ñ Ð¾ÑобенноÑÑÑ ARE, дейÑÑвиÑелÑно неÑовмеÑÑÐ¸Ð¼Ð°Ñ Ñ ERE ÑÑандаÑÑа POSIX пÑоÑвлÑеÑÑÑ Ð² Ñом, ÑÑо в ARE знак \ не ÑеÑÑÐµÑ ÑÐ²Ð¾Ñ ÑпеÑиалÑное знаÑение в квадÑаÑнÑÑ
ÑкобкаÑ
. ÐÑе дÑÑгие ÑаÑÑиÑÐµÐ½Ð¸Ñ ARE иÑполÑзÑÑÑ ÑинÑакÑиÑеÑкие возможноÑÑи, коÑоÑÑе не опÑеделенÑ, не допÑÑÑÐ¸Ð¼Ñ Ð¸Ð»Ð¸ не поддеÑживаÑÑÑÑ Ð² ERE; ÑинÑакÑÐ¸Ñ Ð¿ÐµÑеклÑÑÐµÐ½Ð¸Ñ Ñежимов (***) Ñакже вÑÑ
Ð¾Ð´Ð¸Ñ Ð·Ð° Ñамки ÑинÑакÑиÑа POSIX как Ð´Ð»Ñ BRE, Ñак и Ð´Ð»Ñ ERE.
Ðногие ÑаÑÑиÑÐµÐ½Ð¸Ñ ARE заимÑÑÐ²Ð¾Ð²Ð°Ð½Ñ Ð¸Ð· ÑзÑка Perl, но некоÑоÑÑе бÑли измененÑ, опÑимизиÑованÑ, а неÑколÑко ÑаÑÑиÑений Perl бÑли иÑклÑÑенÑ. Ð ÑезÑлÑÑаÑе имеÑÑ Ð¼ÐµÑÑо ÑледÑÑÑие неÑовмеÑÑимоÑÑи: аÑÐ¾Ð¼Ñ \b и \B, оÑÑÑÑÑÑвие ÑпеÑиалÑной обÑабоÑки завеÑÑаÑÑего пеÑевода ÑÑÑоки, добавление иÑклÑÑений в квадÑаÑнÑÑ
ÑкобкаÑ
в ÑиÑло ÑлÑÑаев, когда ÑÑиÑÑваеÑÑÑ Ð¿ÐµÑевод ÑÑÑок, оÑобÑе ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð´Ð»Ñ Ñкобок и ÑÑÑлок назад в огÑаниÑениÑÑ
пÑоÑмоÑÑа впеÑÑд/назад и ÑеманÑика «наиболее длинное/коÑоÑкое ÑооÑвеÑÑÑвие» (вмеÑÑо «пеÑвое ÑооÑвеÑÑÑвие»).
Ðажно оÑмеÑиÑÑ Ð´Ð²Ðµ неÑовмеÑÑимоÑÑи ÑинÑакÑиÑа ARE и ÑегÑлÑÑнÑÑ Ð²ÑÑажений ERE, коÑоÑÑе воÑпÑинимал PostgreSQL до веÑÑии 7.4:
Ð ARE
\Ñ Ð¿Ð¾ÑледÑÑÑим алÑавиÑно-ÑиÑÑовÑм Ñимволом пÑедÑÑавлÑÐµÑ Ð»Ð¸Ð±Ð¾ ÑпеÑÑимвол, либо оÑибоÑнÑÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ, Ñогда как в пÑедÑдÑÑÐ¸Ñ Ð²ÐµÑÑиÑÑ Ñак можно бÑло запиÑÑваÑÑ Ð°Ð»ÑавиÑно-ÑиÑÑовÑе ÑимволÑ. ÐÑо не должно бÑÑÑ Ð±Ð¾Ð»ÑÑой пÑоблемой, Ñак как ÑанÑÑе не бÑло пÑиÑин иÑполÑзоваÑÑ Ñакие поÑледоваÑелÑноÑÑи.Ð ARE знак
\ÑÐ¾Ñ ÑанÑÐµÑ ÑÐ²Ð¾Ñ ÑпеÑиалÑное знаÑение в[], поÑÑомÑ, ÑÑÐ¾Ð±Ñ Ð¿ÐµÑедаÑÑ\в квадÑаÑнÑÑ ÑÐºÐ¾Ð±ÐºÐ°Ñ Ð±ÑквалÑно, его нÑжно запиÑаÑÑ ÐºÐ°Ðº\\.
9.7.3.7. ÐÑоÑÑÑе ÑегÑлÑÑнÑе вÑÑажениÑ
BRE имеÑÑ ÑÑд оÑлиÑий Ð¾Ñ ERE. Ð BRE знаки |, + и ? ÑеÑÑÑÑ ÑпеÑиалÑное знаÑение, а Ð·Ð°Ð¼ÐµÐ½Ñ Ð¸Ð¼ неÑ. ÐÑаниÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑва окÑÑжаÑÑÑÑ Ñимволами \{ и \}, Ñогда как { и } ÑаÑÑмаÑÑиваÑÑÑÑ ÐºÐ°Ðº обÑÑнÑе ÑимволÑ. ÐложеннÑе подвÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð¼ÐµÑаÑÑÑÑ Ð¼ÐµÐ¶Ð´Ñ \( и \), а ( и ) пÑедÑÑавлÑÑÑ Ð¾Ð±ÑÑнÑе ÑимволÑ. Символ ^ воÑпÑинимаеÑÑÑ ÐºÐ°Ðº обÑÑнÑй, еÑли ÑолÑко он не наÑ
одиÑÑÑ Ð² наÑале RE или подвÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² ÑкобкаÑ
, $ â Ñоже обÑÑнÑй Ñимвол, еÑли он наÑ
одиÑÑÑ Ð½Ðµ в конÑе RE или в конÑе подвÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² ÑкобкаÑ
, и * â обÑÑнÑй Ñимвол, когда он наÑ
одиÑÑÑ Ð² наÑале RE или подвÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² ÑкобкаÑ
(возможно, поÑле наÑалÑного ^). Ð, наконеÑ, в BRE ÑабоÑаÑÑ ÑÑÑлки назад Ñ Ð¾Ð´Ð½Ð¾Ð¹ ÑиÑÑой, \< и \> â ÑÐ¸Ð½Ð¾Ð½Ð¸Ð¼Ñ Ð´Ð»Ñ [[:<:]] и [[:>:]], ÑооÑвеÑÑÑвенно; никакие дÑÑгие ÑпеÑÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² BRE не поддеÑживаÑÑÑÑ.