[Powered by Google Translate] [Семинар: Хватање са регуларним изразима]
[Јован Муссман-Универзитет Харвард]
[Ово је ЦС50.-ЦС50.ТВ]
Ок. Па, сви су добродошли. Ово је ЦС50 2012.
Зовем се Јован, а ја ћу се данас говоримо о регуларним изразима.
Регуларни изрази је пре свега алат, али такође понекад користи
у коду активно да у суштини одговара шаре и жице.
Дакле, овде је веб стрип из Кскцд.
У овај стрип је мистерија где је убица
затим неко на одмору, а протагонисти морају да
претраживати 200 мегабајта поште у потрази за адресу.
И они су о томе да када неко ко зна регуларне изразе -
вероватно суперхерој - обара доле и пише неки код
и решава мистерију убиства.
Дакле, вероватно да ће бити нешто што ћете бити оснажени да
после овог семинара.
Само ћемо да обезбеди концизан увод у језик
и дати вам довољно средстава да иде после више средстава на своје.
>> Дакле, у основи регуларни изрази изгледају овако.
То је регуларни израз у Руби.
То није страшно разликује преко језика.
Ми имамо само на косе црте да почне и обележити регуларни израз у Руби.
И ово је регуларни израз да траже у обрасцу е-маил адресу.
Дакле, видимо у првом мало изгледа за било алфанумерички знак.
То је зато што емаил адресе често морају да почну са абецедном карактера.
А онда специјалном карактеру следи симбол @.
А онда иста ствар за име домена.
А онда између 2 и 4 карактера да потражи цом., Нето, и. Итд.
Дакле, то је још један пример регуларног израза.
Дакле, регуларни изрази су протоколи за проналажење обрасцима у тексту.
Они раде поређења, селекције, и замена.
Дакле, Трећи пример је проналажење све телефонске бројеве који се завршавају у 54 у именику.
Дакле, пре него Давид прасну у ЦС50 директоријум можемо тражите
образац где имамо заграде онда 3 броја онда крај заграде,
3 више бројева, цртица, број 2, а затим 54.
И то би у суштини било како смо дошли до регуларним изразом да тражи то.
>> Дакле, постоји - ми смо урадили неке ствари за ЦС50 који су помало
регуларни изрази, па - на пример - у дицтионари.Ц фајлу
за проверу правописа скуп проблема можда сте користили фсцанф
прочитати у речи из речника.
И можете видети проценат 45с тражи стринг од 45 карактера.
Дакле, то је нешто као рудиментарном регуларног израза.
И можете да имате 45 знакова који се уклапају рачун тамо
и одабрати они горе.
А онда други пример у најновијем проблема веб програмирање
постављен у коду за дистрибуцију ПХП ми стварно имамо једноставан регуларни израз.
А ово је једноставно тражи да провери да ли је веб страница која је донета у
одговара било пријавите или одјавите региструјете ПХП..
А онда се враћају тачно или нетачно на основу тог регуларни израз се подударају.
>> Дакле, када користити регуларни израз?
Зашто си овде данас?
Дакле, ви не желите да користите регуларни израз када постоји нешто што
завршава посао за вас још лакше.
Дакле, КСМЛ и ХТМЛ су заправо прилично лукав
да пишу за регуларне изразе, као што ћемо видети у мало.
Дакле, постоје наменски Парсерс за те језике.
Такође је потребно да се помирим са трговинског оффу и тачности често.
Ако покушавате - па смо видели регуларни израз за е-маил адресу,
али кажу да је желео одређену емаил адресу и постепено
регуларни израз може постати сложенији јер је постало прецизније.
Дакле, то је један компромис.
Морате да будете сигурни да сте добро правите регуларан.
Ако тачно знате шта тражите можда би више смисла
да стави у времену и написати ефикасније анализатор.
И на крају ту је историјски проблем са регуларност
израза и језика.
Регуларни изрази су заправо много моћнији од
Регуларни изрази по реци у формалном смислу.
>> Дакле, ја не желим да идем предалеко у формални теорије,
али већина језици који смо број у ствари нису редовни.
И то је разлог зашто регуларни изрази понекад се не сматрају сви да је безбедно.
Дакле, у основи постоји хијерархија Чомски за језике,
и регуларни изрази се граде коришћењем синдикат, спајање,
и Клеене звезда операцију да ћемо видети за неколико минута.
Уколико сте заинтересовани за теорији постоји доста дешава испод хаубе.
>> Дакле, кратак историјат - само за контексту овде - редовни сетови дошао
у 1950, а онда смо имали једноставне уредници који
регистрован регуларне изразе - само потрази за гудаче.
Греп - што је алатка командне линије - био је један од првих
Веома популарне алатке које регуларне изразе уграђен у 1960.
У '80-им, Перл је изграђен - је програмски језик који
укључује регуларне изразе веома видљиво.
И онда смо недавно имали Перл компатибилни регуларни израз
Протоколи у основи на другим језицима који користе велики део исте синтаксе.
Наравно, најважнији догађај био је у 2008
где је био први Национални Дан регуларним изразима,
што верујем да је 1. јуна, ако желите да то прославимо.
>> Опет, само мало више теорија овде.
Дакле, постоји неколико начина прављења регуларне изразе.
Један једноставан начин је да се изгради израз који ћете
раде на тетиви тумачи - у основи градити мало мини-програм који
ће анализирати комада стринг и види, "О, да ли то одговара регуларни израз или не?"
А онда покренути тај.
Дакле, ако имате веома мали регуларни израз, ово је вероватно
најефикаснији начин да то урадите.
А онда, ако вас - још једна опција је да реконструкција
израз као што иде, а то је могућност симулира.
А ови први покушаји регуларних израза алгоритама су
релативно једноставна и релативно брза, али није имао пуно флексибилности.
Тако да чак и да неке од ствари које ћемо да погледамо
данас смо морали да урадимо сложеније регуларни израз
имплементација које су потенцијално много спорије, тако да је нешто имати на уму
Ту је и регуларни изрази ускраћивање напада сорте
да искористи потенцијал ових новијих имплементација
Регуларни изрази постати веома сложен.
И на исти начин који смо видели у нападима бафера,
имате нападе који раде тако што рекурзивне петље да
прегазе капацитет меморије.
И успут Регекен је један од званичних множине регуларног израза
по аналогији са воловима у англосаксонског.
>> Ок, тако да Питон Библиотека многи од вас овде лично имате Мац,
тако да то заиста може да се на вашем екрану.
Регуларни изрази су уграђени у Питхон-у.
И тако Питхон раније учитан на Мац и такође доступан онлине на овом линку.
Дакле, ако гледате можете да паузирате и проверите да ли имате Питхон
што играмо овде.
Постоји приручник на мрежи, тако да ако само откуцате Питхон у рачунар
видећете да верзија појави у терминалу.
Тако да сам дао линк ка упутству за верзију 2 Питхон као и Цхеат Схеет.
Постоји верзија 3 Питхон, али ваш Мац не мора
који долазе са инсталираним.
Дакле, није толико другачији.
Ок, па неке основе коришћења регуларних израза у Питхон-у.
>> Дакле, овде сам користио врло једноставан израз, тако да сам Питхон поново увоз
а затим је резултат ре.сеарцх.
И претраживање траје 2 аргументе.
Први је регуларни израз, а други је текст
или ниска желите да анализирате.
А онда сам се штампа на ресулт.гроуп.
Дакле, то су 2 основне функције којима ћемо да видимо данас
у учењу о регуларним изразима.
Дакле, само се разбије овде ово регуларни израз
х, а затим \ в и онда сам тако \ в само прихвата било абецедни знак тамо.
Дакле, овде смо у потрази за "х", а затим још један абецедни знак
а онда сам, па ево да се поклапају врат
у, "Абрахам Линколн и сендвичи шунка".
То је резултат те групе.
Још једна ствар коју можемо да урадимо је да користимо наше пред низове текста у Питхон-у.
Тако да претпостављам да ћу ићи напред и повуците је овде.
Питхон поново увоз.
И ако бих урадио исту ствар - рецимо текст,
"Аврам," хајде да увећате - ту смо.
Текст је, "Аврам шунка једе."
У реду, а затим довести = ре.сеарцх.
И онда може да буде израз наше ч, а онда ћу учинити дот м.
Дакле, тачка је само потребно било који карактер који није нова линија укључујући и бројеве,
проценат знаци, тако нешто.
А онда текст - бум - и онда ресулт.гроуп--да.
Дакле, то је само начин да се овде спроводи основну функционалност.
Ако смо имали текст прстен који је луд - Текст - укључени рећи много обрнуте косе црте
и жице унутар и ствари које би могле да изгледају као низова,
онда вероватно желите да користите сирове унос текста да се уверите да је прихваћен.
И то само изгледа тако.
Дакле, ако смо у потрази за сваког од њих тамо не би требало да пронађе ништа.
Али то је како да га спроведе, баш пре него што је низ
регуларни израз сте ставили слово Р.
>> Ок, хајде да наставимо.
У реду - па хајде да погледамо неколико понављају обрасце овде.
Дакле, једна ствар коју желите да урадите је да понови ствари
као што сте у потрази кроз текст.
Тако да следи било који број б - ти АБ *.
А онда такође постоји низ других правила.
И можете погледати све ове горе, ја ћу проћи кроз неке од
најчешће коришћених.
Дакле, АБ + је било праћено Н већи од 0 од б.
АБ? је праћено 0 или 1 на б.
аб {Н} је потом из Н б, а затим тако даље.
Ако имате 2 броја у заграда сте наводећи низ
то може бити евентуално упарен.
Тако ћемо погледати још на неколико образаца који се понављају у минути.
Дакле 2 ствари које треба имати на уму приликом коришћења оваквих алата Хватање овде.
Па реци ми желимо да погледамо ХМ из "Абрахам Линколн прави сендвиче врат."
Тако да сам променио име Абрахама Линколна Авраму.
И сада смо у потрази за оно што се враћа овом функција претраге,
и то само даје врат у овом случају.
И то не само зато што тражи природно узима леви највише ред.
И сви регуларни изрази, осим ако није другачије одредите ће то урадити.
Ако бисмо желели да пронађе све што је функција за то - наћи све.
Дакле, да би баш изгледа као АЛЛ = (ре.финдалл 'х.м', текст)
а затим алл.гроуп ().
Сви производи и шунку и шунком, у овом случају оба конце у сваком Аврама шунке.
Дакле, то је још једна опција.
>> Велики. Друга ствар коју треба имати на уму је да регуларни изрази узети највећи интуитивно.
Погледајмо овај пример.
Урадили смо то овде крајње леве претрагу, а онда сам покушао већи претрагу
коришћењем Клеене звезда оператера.
Дакле, за "Абрахам Линколн прави сендвиче шунка", а добио сам само вратио
м као резултат.
Разлог за то грешка је била што сам могао узети било који број
ч је зато што није прецизирао ништа да иде између ч и м.
Једини пример да је тамо имао м - једини примери тамо са М у њој
и било који број Х су само ниска м.
Онда сам пробао поново, рекао сам, "У реду, хајде да се овде стварно највећу групу."
А онда сам ч. * М, тако да само даје било који број знакова између ч и м.
А ако тек почињете и размишљања, "Ох, у реду, па ће
донеси ми врат, "то је заправо потребно све од х у Абрахама Линколна
па све до краја шунке.
То је похлепан, то види ч - све ово други текст - м,
и то је оно што је потребно за
Ово је посебно Озбиљна - ово је карактеристика коју такође можете да
спецификацију за то не буде похлепан за остале функције.
Али, то је нешто што морамо имати на уму посебно
када се гледа у ХТМЛ текст, што је један од разлога да
Регуларни изрази су тешко за ХТМЛ.
Јер, ако имате отворен ХТМЛ ознаке и онда доста ствари у средини
и онда неки други ХТМЛ таг затворен много касније у програму,
Управо сте појели пуно ХТМЛ кода можда грешком.
>> Сва права - тако да више специјалних карактера, као и многе друге језике,
да побегне користећи косу црту.
Тако да могу да користе тачку да наведете било који карактер, осим за нову линију.
Можемо користити в бекство за спецификацију абецедни знак.
И са д аналогије излаза за сваки цео број - нумерички карактер.
Можемо навести - можемо користити заграде да бисте навели сродне изразе.
Дакле, ово би прихватили, Б или Ц.
И можемо одредити или опције или А или Б.
На пример - ако смо у потрази за више могућности
у загради можемо да користимо као оператор или у -
па хајде да се вратимо на овај пример овде.
А сада узмимо - хајде да се вратимо на овом примеру овде, а затим
узети АЕ - па то би требало да се врати - Претпостављам да је ово још увек Аврам.
Дакле, ово - ако урадимо све - одлично.
Дакле, хајде да ажурирате овде текст.
"Аврам једе врат док му Хемминг -. Док Хемминг" Велики.
Све. Велики. Сада смо добили врат, шунка, и хем.
Док Хемминг - док му зуји - зуји док се скута њега. Велики.
Иста ствар.
Сада све враћа још само шунка, шунка, а Хем без брање горе на Хум или њега.
Велики - па шта ако бисмо желели да погледамо било који - тако да смо могли да урадимо
њега, или - ми ћемо вратити на то.
Добро - па - у реду - на позицијама можете користити курсор или знак за долар
да наведете да сте у потрази за нешто на почетку или на крају стринга.
Или почетак или крај речи.
То је један од начина да се то користи.
>> Добро - па да се играте са мало већих блок текста.
Рецимо овде овај ред - овде ову изјаву.
Моћ регуларног израза је да они могу одредити обрасце
Не само фиксна знакове.
Учинимо - назовимо овај блок.
Онда ћемо прочитати све што унутра
А онда су - хајде да све =, тако што су неке ствари које смо могли да тражи у овде профитабилно?
Могли би да потражите израз уво.
Није занимљиво. Шта мислите о томе? Видећемо шта ће се десити.
Дао сам проблем.
Дакле, било који број ствари пре него што се поново и све.
Тако да би требало да се врати све, од почетка до свих ре можда пар пута.
А онда овде имамо моћ регуларних израза је да су
може одредити обрасце не само ликови су овде.
Дакле, све до коначног ре, почело је са леве стране и највише био похлепан.
Хајде да видимо - шта друго можемо тражити.
Ваљда једну ствар, ако сте били заинтересовани у потрази за заменице она и он,
можете да проверите е је једнака 0 или 1.
и израз је, а то се вероватно неће вратити -
Ох, мислим да се вратио зато што смо тражили на власти, тога дана, овде су.
Покушајмо прецизирајући да то мора да дође на почетку нечега.
Хајде да видимо да ли то спада.
Тако да можемо да урадимо масти, и ту ми не добијамо ништа, јер је она и он
не јављају у ову фразу.
Велики. Добро - па назад у ту мачку.
Тако сложени обрасци се повреди мозак.
Дакле, то је разлог зашто користимо регуларне изразе да бисте избегли ове проблеме.
>> Дакле, ево неких корисних начина можете да се играте са.
Гледали смо претрагу данас, али такође можете да користите мец, Сплит, финдалл и групе.
Дакле других кул ствари које можете да урадите са регуларним изразима осим само
у потрази за обрасцима узима узорак и држи све мечеве -
њене варијабле - и онда они користе у коду касније.
То може да буде веома корисно. Друге ствари могу да се броји.
Тако да можемо рачунати на број инстанци регуларни израз образац,
и то је оно што могу да користе групе за.
И други модови као и могуће су.
Ја само желим да кажем нешто више о другим начинима можете користити регуларне изразе.
>> Дакле, још једна напредна апликација је у фази усклађивања.
Дакле, ако сте у потрази за текст за изражавање, Јулије Цезар,
и ти види ни Гај Јулије Цезар или име Јулија Цезара на другим језицима,
онда можда ћете желети да доделите неку тежину тих вредности.
А ако је довољно близу - ако пређе одређени праг - онда желите
да би могли да прихвате Јулија Цезара.
Дакле, постоји неколико различитих имплементација за то у неколико другим језицима.
Овде су неке друге алатке, Регек Пал - згодан мали апп онлине да
Проверите да ли ваш регуларни изрази се исправно састављен.
Ту су и самосталне алатке које можете да покренете са десктопа
као што су Ултра Пико, и као и само куваре.
Дакле, ако радите пројекат који укључује гомилу регуларним изразима
ово је вероватно место за излазак изван оквира данас.
И онда само да вам дати осећај колико је то честа
постоји греп у Уникс, Перл има уграђене, а Ц је ПЦРЕ за Ц.
А онда сви ови други језици имају регуларни израз пакете
који раде са суштински исту синтаксу имамо укус данас.
ПХП, Јава, Руби, и тако даље.
>> Гоогле Цоде Сеарцх је заиста вредан помена, то је један од
релативно мали број апликација вани који омогућава јавности да приступи
његова база података помоћу регуларних израза.
Дакле, ако се осврнемо на Гоогле Цоде Сеарцх можете наћи код
Ако сте у потрази за пример како може да се користи функција,
можете користити регуларни израз да пронађе ту функцију која се користи у свим врстама различитих предмета.
Можете да тражите фврите, а онда можете да погледате на застави писати или читати
ако сте хтели пример фврите се користи у том случају.
Тако исто тамо, а овде су неке референце.
То ће бити доступан онлине, као, тако да иде напред када је
желите да погледате, Питхон, Перл греп - само желите да добијете инспирацију
или ако желите да погледате више у теорији Овде су неке добре скочивши местима.
Пуно Вам хвала.
[ЦС50.ТВ]