КампутарыПраграмаванне

Рэгулярныя выразы (PHP). PHP: рэгулярныя выразы, прыклады

Наколькі вялікі і шматстайны свет інфармацыі, настолькі ж імкліва ён пашыраецца і развіваецца. Любое рашэнне - усяго толькі момант у агульным працэсе руху. Веды і вопыт даюць магчымасць разумець працэс дасягнення мэты, але ніколі - не вынік яе дасягнення. Сумнеўна, што ў агляднай будучыні наогул можна гаварыць пра вынік, але вельмі важна, што працэс імкнення да яго ўяўляе істотны і аб'ектыўна-неабходны працэс.

«Жаданне і / або вялікія грошы» не ствараюць алгарытм, здольны на тое, што натуральна і «бясплатна» робіць чалавек, асабліва калі ён не задумваецца над тым, што менавіта ён робіць. Ва ўсякім становішчы інфармацыйнай задачы ёсць як мінімум адно белае пляма, але за ім, звычайна адразу, бачныя іншыя белыя плямы, і зусім не абавязкова, што ўсе яны белых кветак.

Інтэрнэт тэхналогіі істотна спрасцілі доступ да інфармацыі, але пытанне - як накласці на наяўнае жаданае - ня спрасціўся, а набыў новыя «аб'ёмы» работ. І хоць на PHP рэгулярныя выразы прабел відавочна не вычарпаюць, яны ёсць істотны крок наперад.

Простыя функцыі + алгарытм = шаблон

Прапаноўваючы рэгулярныя выразы, PHP істотна памяншае ўтрыманне алгарытму, але звычайныя функцыі пошуку / замены і алгарытмы апрацоўкі знойдзенага ня страцілі свайго значэння. Новыя ідэі не прадказваюць інфармацыйную рэвалюцыю. Максімум, на які можна разлічваць - кампактны код і рост ўмення распрацоўніка правільна фармуляваць пошукавы запыт.

Варта ведаць і ўжываць на PHP рэгулярныя выразы. Прыклады пераканаўчыя і эфектыўныя. Але варта аддаваць справаздачу, што са з'яўленнем новага механізму пошуку цэнтр цяжару перамясціўся ў шаблон - своеасаблівы механізм, хоць па сутнасці замяняе мноства простых функцый пошуку, умоў, цыклаў, іншых аператараў.

мець:

  • якасны і сучасны інструмент - гэта добра;
  • бачыць і выкарыстоўваць вопыт калег -гэта важна;
  • сумяшчаць рэальную рэчаіснасць і віртуальныя ідэі - гарантыя поспеху.

Дасягненне веды, як трэба было разумець задачу, каб яе вырашыць, часцей мае большае значэнне, чым канкрэтны вынік.

Рэгулярныя выразы ў PHP прадстаўлены некалькімі функцыямі ў сінтаксісе мовы і мноствам карысных прыкладаў у інтэрнэце. З прычыны спецыфікі сінтаксісу мовы варыянты прымянення абмежаваныя толькі уяўленнем распрацоўніка, аднак слеует мець на ўвазе, што далёка не ўсе шаблоны будуць працаваць. Сродкамі PHP праверка рэгулярных выразаў мае істотнае значэнне.

Просты пошук сімвала (радкі)

Сімвал - гэта не заўсёды адзін байт, і часта сімвал, як элементарны сігнал, нясе дакладны сэнс дадаткова. Кадоўка вызначае бачныя сімвалы ў кодзе па рознаму. Сімвал можа мець некалькі варыянтаў: "$" = "USD" = "у.е.", ... - гэта дакладны сэнс, што дзе-небудзь што-небудзь, але не абавязкова побач, звязана з валютай. Аднак дакладны сэнс можа ляжаць і ў зменнай PHP, якая заўсёды пачынаецца з знака "$", але не можа пачынацца з "USD" і "у.е.".

У праграмах сімвалам можа быць імя функцыі (радок) у кантэксце: распазнаць і выканаць - гэта з вобласці дынамічнага аб'ектна-арыентаванага праграмавання, калі канструкцыі, функцыі, рэгулярныя выразы PHP выкарыстоўваюцца непасрэдна для прыняцця рашэнняў. Знойдзены сімвал «спаўняецца», гэта значыць сам сабой вызначае, што трэба рабіць у тым месцы, у якім ён знойдзены, і так, як ён гэта «сам палічыць» патрэбным.

Шукаць проста сімвал / радок - не такая простая занятак, і чым больш у знаку інфармацыі, тым лепш. Не заўсёды трэба знайсці дзясятак лепшых коштаў на прадукты харчавання, выбраць смачныя рэцэпты святочнага торта або вызначыцца з падрадчыкам на навясны столь.

Часта даводзіцца аптымізаваць простыя алгарытмы з не просты інфармацыйнай арыфметыкай або ў складаных умовах, калі шуканы сімвал трэба выбраць з базы дадзеных, а радок, у якой яго варта знайсці, - у сотні сайтаў. Пры гэтым кошт выбару сімвала роўная часу выбаркі з базы дадзеных, а кошт таго, дзе шукаць - часу пошуку праславутай сотні сайтаў.

Самотны сімвал - гэта не фраза і ня некалькі фраз, ён можа знаходзіцца дзе заўгодна і быць калі заўгодна малым. Як вызначыць, што менавіта знойдзенае ёсць шуканае?

Прыклад: пошук цэны

Проста знайсці ў тэксце сімвал "$" - мала. Праверыць, што перад ім стаіць лічба, таксама не заўсёды дастаткова. Калі прадугледзець кропку або лічбу перад сімвалам "$", гэта гарантыя, што цэны, у якіх грашовыя знакі стаяць наперадзе, не будуць улічаныя. Будуць таксама прапушчаны цэны, у якіх наогул не паказаная грашовая адзінка, але на старонцы ёсць на яе відавочнае ўказанне.

Увогуле, рашэнне пастаўленай задачы звычайнай выявай раздам алгарытм да непазнавальнасці і зойме шмат часу. Між тым, выкарыстоўваючы рэгулярны выраз, лік PHP знойдзе без праблем.

$ CContents = preg_match_all ( "/ [0-9] + ([\ $] | usd | у \ .е \. | Уе) {1} / i";

"Look e-mail - 2usd;
";
"Find e-mail - 2у.е .;
";
"Work e-mail - уе2;
";
"Check e-mail - $ 13", $ aResult);
. '; '. implode ( ',', $ aResult [0]). '
'.

Дасць адказ: "2; 2usd, 2у.е.", Але не знойдзе нічога ў радку: "check e-mail - $ 13".

Прадугледзеўшы ў шаблоне наяўнасць сімвала спераду або ззаду, можна хутка дасягнуць мэты ў пераважнай большасці выпадкаў.

$ CContents = preg_match_all ( "/ ([0-9] + ([\ $] | usd | у \ .е \. | Уе) {1}) | (([$] | usd | у \ .е \. | уе) {1} [0-9] +) / i ";
"Look e-mail - 2usd;
";
"Find e-mail - 2у.е .;
";
"Work e-mail - уе2;
";
"Check e-mail - $ 13", $ aResult);
. '; '. implode ( ',', $ aResult [0]). '
'.

Вынік: «4; 2usd, 2у.е., уе2, $ 13".

Аб непрадугледжанай логіцы

Рэгулярныя выразы PHP прапануе, як і іншыя інструментальныя сродкі, але зусім не абавязкова іх ужываць па ягоных правілах або выкарыстаць іншыя малыя функцыі прадугледжаных сінтаксісам чынам.

Можна перад пачаткам пошуку ператварыць шуканае ў масіў, а месца, дзе будзе ажыццёўлены пошук, разбіць на складнікі па папярэдняй крытэру. Простая пара функцый explode () і implode () часта спрашчае і паскарае рашэнне.

Напрыклад, у выніку папярэдніх работ сфарміраваны масіў радкоў (дадзеных) па раёне аб тым, колькі бульбы сабрала кожная вёска: паказана ИмяДеревня і сабраны аб'ём, а калі ў вёсцы працуе некалькі прадпрыемстваў, то ў радок масіва ідзе ИмяДеревня.ИмяПредприятие і значэнне праз "; " і так па ўсіх прадпрыемствах. Палічыць агульны аб'ём сабранага ў дадзеным выпадку не прадставіцца магчымым, але калі зрабіць impode ( ";", $ aResult), будзе адна доўгая радок, у якой пары - ИмяДеревня / ИмяДеревня.ИмяПредприятие - сходу аб'ём - будуць пералічаныя праз ";". Зрабіўшы адваротнае на атрыманым, explode ( ";", $ aResult) - масіў ўсіх, хто збіраў і колькі ён сабраў, затым, выдаліўшы з радкоў усё нялічбавыя сімвалы, маем толькі лічбы, сума якіх і будзе агульным аб'ёмам сабранага.

У дадзеным прыкладзе рэгулярныя выразы на PHP дазваляюць зусім не шукаць лішняе, яны проста і даступна здабываюць патрэбныя лічбавыя значэння. Хутка і эфектыўна, якімі б доўгімі ні былі імёны вёсак і прадпрыемстваў. Гэта рашэнне не ідэал, але яно паказвае, што далёка не заўсёды варта прытрымлівацца правілах. Часта можна дасягнуць жаданага незвычайным чынам.

Абстрагуючыся ад тэхнічнага боку, ад кадоўкі

Сінтаксіс алгарытму не кажа пра тое, як ён выглядае на самай справе. Але, забяспечыўшы аднолькавую кадзіроўку старонкі, скрыпту і радкоў (якая шукаецца і ў якой адбываецца пошук), можна пагрузіцца ў задачу па-за яе тэхнічнага боку.

Трэба не толькі ведаць, што шукаць, але і дзе гэта рабіць, калі, у якой колькасці, на што мяняць і якім чынам. Фармальна рэгулярныя выразы PHP выкананы як скончаны уласны поўнафункцыянальны механізм, аднак па многіх прычынах рэалізацыя яго аналагаў у розных мовах адрозніваецца. Па агульнаму правілу, перш чым пераносіць той ці іншы шаблон ў той ці іншы інструментальную сераду для вырашэння канкрэтнай задачы, неабходна правесці якасную адаптацыю, выканаць праверку на ўсіх магчымых варыянтах зыходных дадзеных.

Нават калі выкарыстоўваецца уласны вопыт распрацоўкі на PHP, рэгулярныя выразы, прыклады, шаблоны і канструкцыі патрабуюць пільнай праверкі. Дынамічна мяняецца функцыянал мовы, яе сінтаксіс і асяроддзе выканання.

Структура і змест шаблону

Тое, што было раней напісана ў выглядзе камбінацыі функцый пошуку, умоўных аператараў, аперацый замены, устаўкі, выдалення, заключаецца ў адзін радок знакаў па пэўных правілах - шаблон рэгулярнага выразы. Фактычна значны аб'ём кадуецца строга пэўным сэнсе, таксама спаўняецца па канкрэтных правілах.

Роўна як нельга заняцца адладкай любога аператара мовы, так нельга выканаць адладку шаблону назваў паведамленняў, гэты працэс можна толькі эмуляваць. Па агульнаму правілу прыняты варыянт: працуе - не працуе. Сінтаксіс вельмі просты, хоць яго ўспрыманне, асабліва ў пачатку працы, вельмі цяжка.

Прыклад простага выказвання

У простым варыянце шаблон супадае са радком:

$ CContents = preg_match ( "/ asdf / i", "asdf", $ aResult). '; '. implode ( ',', $ aResult).

Вынік будзе "1; asdf", паколькі функцыя заканчвае сваю працу на першым жа сустрэтым супадзенні шаблону. Вынік будзе той самы, калі шукаць у радку "aaaasdf" і ў радку "zzzasdfvvv". Калі пазначыць першы і / або апошні сімвал, то вынік будзе адназначным:

$ CContents = preg_match ( "/ ^ asdf / i", "asdf", $ aResult). '; '. implode ( ',', $ aResult). '
';
$ CContents. = Preg_match ( "/ asdf $ /", "asdf", $ aResult). '; '. implode ( ',', $ aResult). '
'.

Вынік будзе: 1; asdf1; asdf.

Сімвалы "^" і "$" паказваюць, з чаго пачынаецца шаблон і чым заканчваецца. Вынік функцыі preg_match - колькасць супадзенняў, яно можа быць 0, 1 або false, калі выяўленая памылка. У трэці параметр - масіў - змяшчаецца адзіны знойдзены элемент. У выпадку выкарыстання функцыі preg_match_all () пошук працягваецца да канца радка.

$ CContents = preg_match ( "/ asdf / i", "asdf123asdf456asdf789", $ aResult). '; '. implode ( ',', $ aResult). '
';
$ CContents. = Preg_match_all ( "/ asdf / i", "asdf123asdf456asdf789", $ aResult). '; '. implode ( ',', $ aResult [0]). '
'.

Вынік:

1; asdf
3; asdf, asdf, asdf.

Калі не выкарыстоўваць спецыяльных указанняў, то кожны знак вызначае сябе і сваё месца, па-за залежнасці ад кадоўкі радкі і кадоўкі шаблону. Праграміст абавязаны паклапаціцца, каб кадоўкі гэтых элементаў былі карэктнымі ў адносінах адзін аднаму і кадоўцы старонцы.

Функцыі PHP для працы з рэгулярнымі выразамі

Рэгулярныя выразы на PHP ўяўляюць сабой радка знакаў, запісаныя пэўным чынам. Звычайна, па аналогіі з іншымі мовамі праграмавання, яны запісваюцца ў знаках "/" ... "/" і змяшчаюцца ў двукоссі, у залежнасці ад алгарытму можна выкарыстоўваць адзінарныя і падвойныя.

Асноўная функцыя php preg match рэгулярныя выразы выкарыстоўвае як супадзенне шаблону і спыняецца пры першым яго знаходжанні, яе варыянт з суфіксам _all шукае усе супадзенні і выдае масіў такіх. Функцыя preg replace вырабляе замену кожнага знойдзенага супадзення шаблону, яна можа працаваць з масівамі, дазваляючы праектаваць пошук і выконваць замену па мностве варыянтаў.

Цікавыя варыянты працы з рэгулярнымі выразамі можна распрацаваць пры дапамозе функцыі preg_replace_callback, якая прымае не тэкст для замены, а імя функцыі, якая будзе выконваць такую замену. Акрамя практычнага значэння тут можна рэалізаваць механізмы праверкі шаблонаў, што ў распрацоўцы і адладцы апошніх адыгрывае істотную ролю.

Сфера прымянення рэгулярных выразаў

Паколькі мовы гіпертэксту ўяўляюць сабой фармалізаваць інфармацыю, у большай меры менавіта яны з'яўляюцца зыходным матэрыялам. Распрацавана вялікая колькасць шаблонаў і канструкцый, якія дазваляюць эфектыўна апрацоўваць вялікія аб'ёмы інфармацыі. Значную частку такой працы выконваюць механізмы, убудаваныя ў розныя сістэмы кіравання сайтамі (CMS).

Не дзіўна, што многія CMS сталі стандартамі дэ-факта для пабудовы сайтаў, і, быўшы суправаджаюцца (абнаўляюцца) кампаніямі-распрацоўшчыкамі, яны не робяць неабходным выконваць распрацоўку шаблонаў уласнымі сіламі. Аднак за межамі такіх сістэм мець досвед працы з рэгулярнымі выразамі вельмі карысна.

Рэгулярныя выразы і рэальная інфармацыя

Важная вобласць прымянення рэгулярных выразаў на PHP сфарміравана з'яўленнем бібліятэк PHPOffice. Праца з дакументамі і электроннымі табліцамі заўсёды мела і мае важнае значэнне, а стандарт OOXML дазволіў не толькі разбіраць рэальныя дакументы, але і фарміраваць іх праграмна.

Дзякуючы развіццю моў гіпертэксту і PHP у прыватнасці, з'явілася рэальная магчымасць аўтаматызаваць "вытворчасць" дакументаў "стандартнай формы", напрыклад, рахункаў на аплату, справаздач, бізнес-планаў і іншых інфармацыйных аб'ектаў, структура і змесціва якіх рэальна паддаецца фармалізацыі і аўтаматызацыі.

У сувязі з ужываннем для апісання мовы OOXML працэс распрацоўкі рэгулярных выразаў мае істотныя адрозненні ад традыцыйнай працы з мовамі разметкі HTML і CSS у першую чаргу. Рэальны дакумент, акрамя разметкі і акрамя ўласна кантэнту мае мноства дэталяў. Напрыклад, дакумент, створаны аўтаматычна праграмай, будзе мець строгае і дакладнае ўтрыманне. Дакумент, сфармаваны чалавекам або ім апрацаваны, будзе мець змест, распісанае паводле мноства тэгаў. Любая праца з дакументам прыводзіць да таго, што семантыка яго можа заставацца адной, але распісанай ўнутры па розным колькасці розных канструкцый.

Натуральная інфармацыя і сітуацыя

Чалавека заўсёды цікавіць рашэнне задачы, пастаноўка якой ёсць інфармацыя і, у выніку, будзе дадзена гэтак жа інфармацыя. Прадставіўшы пастаноўку задачы ў выглядзе дакумента, чалавек атрымлівае пэўную семантыку, якая ў ходзе ўдакладнення спецыялістамі (ўнясенне змяненняў, ўдакладненне фармулёвак, выдаленне, рэдагаванне) прыводзіць не толькі да мноства варыянтаў аднаго дакумента, але і да яго версіях з розным зместам.

У прыватнасці, задача, пастаўленая фразай "Вырашыць квадратна уранение", пасля рэдагавання не будзе выглядаць так: "Вырашыць квадратнае раўнанне". Калі была выпраўленая спачатку першая памылка, а потым другая, то натуральная інфармацыя ў стылі OOXML можа мець выгляд: "[Вырашыць] [] [квадратна] [е] [] [ўра] [у] [нанне]", але гэта зусім не гарантыя, што менавіта так задача будзе выглядаць у тэгах OOXML (квадратныя дужкі эмулюецца дужкі тэгаў).

Сабраць разам інфармацыю можна лёгка пасля кожнага працэсу рэдагавання задачы, але кожны раз гэтая працэдура будзе выконвацца па розным алгарытме. Рэгулярныя выразы, як свайго роду інструмент фармалізацыі інфармацыйных задач, сталі, па сутнасці, сцежкай ад фармальных гіпертэкставых структур да натуральнай інфармацыі.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 be.birmiss.com. Theme powered by WordPress.