Започнете с Regex: Редовните изрази улесняват

Разкриване на информация Вашата поддръжка помага за поддържането на сайта! Печелим такса за препращане за някои от услугите, които препоръчваме на тази страница.


Редовният израз, регекс или регекс за кратко е поредица от букви и символи, която определя логически модел. След това низовете от текст могат да бъдат сравнени с шаблона, за да се идентифицират низовете, които съответстват на логическия шаблон, определен от регекса. Въз основа на това сравнение, регексът може да се използва за идентифициране на текстови низове, които отговарят на конкретни изисквания или за потвърждаване, че низовете отговарят на необходимия модел.

Ако това обяснение на регекс изглежда малко абстрактно, може би да разгледаме няколко често използвани приложения на регекс ще ви помогне да изясните тяхната полезност. Regex се използват през цялото време в компютърното програмиране. Например, ето няколко често използвани приложения за регекс:

  • За да потвърдите, че имейл адресът, въведен в уеб форма, е правилно формулиран имейл адрес.
  • За идентифициране на всички файлове в компютърна система, които завършват с определено разширение на файл.
  • За да проверите URL адреси, поискани от уеб сървър и да извършите пренасочвания, ако URL адресите отговарят на образец за повторно изражение.

Важно е да се разбере, че регексът е логична система за описание на модели, а не език. Регексът обаче е реализиран в много различни езици за програмиране и може да се използва и за търсене на текст в много текстови редактори.

История на Regex

Regex е замислен като теоретичен принцип на информатиката, когато е създаден през 1956 г. от математика Стивън Коул Клайн. В началото регексът беше чисто теоретичен. Въпреки това през 1968 г. той се използва в компютърно приложение за първи път, когато Кен Томпсън го включи в текстовия редактор на QED. Томпсън не беше сам при приемането на регекс. Приблизително по същото време Дъглас Т Рос включи в компилатор регекс за лексикален анализ.

Тези първи регекс-реализации скоро бяха последвани. В началото на 70-те години в текстовия редактор на Unix бяха добавени логически модели за регекс, изд. Малко след това вграденият в ed редактор за генериране на регекс е отменен като самостоятелна помощна програма Unix, наречена grep. Тогава беше само въпрос на време, преди поддръжката на regex да бъде включена в много Unix помощни програми и приложения, включително vi, lex, sed, Awk, expr, Emacs и други.

По времето, когато regex беше проникнал в различни ъгли на операционната система Unix, тя се вкорени. Все пак имаше място за подобрение. Така оригиналният синтаксис за генерични разработки, разработен от Kleene, е подобрен през 80-те години на миналия век, когато в Perl е добавена поддръжка за разширени модели на регекс, базирана на разширена библиотека за регулярни регекси, написана от Хенри Спенсър. Въпреки това, дори след добавянето на регекс към Perl Spencer продължава да се разширява идеята и по-късна и по-напреднала итерация на библиотеката му е вградена в езика за програмиране на Tcl – и това внедряване в крайна сметка си проправя път в високопрофесионални проекти за управление на съвременна информация като PostgreSQL.

През 80-те години регексът никога не е бил стандартизиран. Това обаче се промени през 1992 г., когато регексът беше стандартизиран в POSIX.2. Днес regex се поддържа от много различни езици за програмиране и текстови редактори. Повечето съвременни реализации са съвместими с POSIX, но като цяло се разширяват на стандарта POSIX по различни начини, които варират от една реализация до следваща. В резултат на това, докато основните модели на регекс обикновено съвпадат от една реализация на следваща, напредналите модели могат да варират значително в зависимост от средата, в която се прилагат.

Как работи Regex

Редовният израз е комбинация от два типа знаци: буквали и специални знаци. В комбинация тези знаци определят логически модел. Низовете на текста могат да бъдат сравнени с този шаблон, за да се види дали отговарят на модела, определен от израза.

Буквалните герои се представят. Това означава, че буквалната буква а представлява буквата а, а буквалното число 1 представлява цифрата 1. Въпреки това, регексът не е много ценен, ако се ограничава до буквални знаци. Специалните символи са това, което прави полезното излъчване.

Специалните знаци имат логическо значение в рамките на образец за генериране. Например, нека да разгледаме точката. Точката или периодът се използва за представяне на всеки символ. И така, .a би съвпадал с всяка последователност от два знака, в която вторият символ е буквалната буква a. Това означава, че ba, 1a, -a, aa и буквата, предшествано от празно пространство, всички биха съвпадали с този модел на регекс..

Точката не е единственият специален символ в регекс. Има около дузина специални символи, които могат да се комбинират с литерали, за да опишат сложни логически модели. Нека разгледаме два примера за това как литералите и специалните символи се комбинират, за да дефинират сложни изрази:

  • Ако искате да се уверите, че низ от текст е имейл адрес, можете да го тествате спрямо този шаблон за регекс: ^ [A-Z0-9 ._% + -] [защитен имейл] [A-Z0-9.-] +. [AZ] {2} $.
  • За да сканирате имена на файлове и да уловите всяко, завършило с разширението на .php файла, можете да използвате следния регекс: ^. *. Php $.

Ако сте нов за генериране, тези модели вероятно са доста объркващи. За да разберете как работят тези модели, трябва да разберете какво означават всички специални знаци.

Специални герои на Regex

Докато всяка реализация на регекс в някои аспекти варира малко, те обикновено третират тези специални символи по един и същи начин с малки изключения.

  • : Символът на обратната черта се използва за бягство от други специални символи. Така че, ако искате да избягате от друг символ, като точка, така че той да бъде интерпретиран като буквален символ, можете да го направите, като предшествате точката с обратната черта като тази: .
  • ^: Uptick се използва за посочване на начална позиция в низ. Регекс ^ а ще съвпада с всеки низ, започващ с буквалната буква a.
  • $: Знак за долар се използва, за да съответства на крайната позиция в низ. Регексът $ ще съответства на всеки низ, завършващ с буквалната буква a.
  • .: Точката или периодът съвпада с всеки символ, различен от нов (n) символ. Регексът 1.3 ще съвпада с всеки низ с буквален, всеки символ и три буквални като 123, 1a3 и дори 1 3.
  • |: Вертикалната тръба е избор на оператор и може да се интерпретира като резервна дума за думата или. Така че регексът a | b може да се чете като “a или b” и да съвпада или с буквата a, или с буква b.
  • *: Звездичка се използва, за да съответства на предходния символ нула или повече пъти. Така регексът * ще съвпада с всеки низ, стига да не съдържа нов ред.
  • ?: Въпросният знак ще отговаря на нула или един път на предходния символ, но не повече. Регекс 123? следователно ще съответства или на 12, или на 123.
  • +: Символът плюс съвпада с предходния символ един или повече пъти, но символът трябва да се появи поне веднъж, за разлика от звездичката, която съответства на предходния символ нула или повече пъти. Така че, регулярното изражение a * b + би съответствало на ab и b, но не и a, защото b трябва да се появи поне веднъж поради използването на символа плюс.
  • […]: Скобите съвпадат с един знак, съдържащ се в скобите. Или може да се добави крачка, подобна на тази [^ …], за да съответства на всеки символ, който не се съдържа в скобите. Не е необходимо да избягвате специални символи в скоби, те ще бъдат интерпретирани като буквали. Скобите често се използват за определяне на диапазони от знаци. Например, regex [0-9] ще съвпада с всяка една цифра, а [A-Z] ще съответства на всяка главна буква в английската азбука. И накрая, скобите могат да съдържат символи, разделени със запетая. Така [a, g] би съвпаднал с една от буквите a и g.
  • {…}: Къдравите скоби, наречени изрични количествени характеристики, определят броя пъти, в които трябва да се появи предходният символ. Регексът ab {2} c може да бъде изпълнен само от abbc. Може да се добави второ число, за да се създаде диапазон от приемливи стойности. Така че ab {2,3} c ще съвпада или abbc или abbbc и [0-9] {1,2} ще съответства на едно или двуцифрено число.
  • (…): Парентезата се използва за маркиране на субекспресия в по-голям израз. Така регексът (abc) * би съвпадал с всеки низ, съставен от буквите abc, но и трите букви трябва да се показват заедно и в този ред.

Сами по себе си специалните герои са донякъде полезни. Именно в комбинацията от тези специални знаци с литерали могат да се опишат мощни модели. Списъкът със специални символи по-горе включва няколко прости комбинации от специални знаци. Нека разгледаме втори регекс за идентифициране на PHP файлове, за да видим как тези герои работят заедно.

Ето въпросният регекс: ^. *. Php $. Нека го вземем едно по едно.

  • ^ указва началото на тестовия низ, който в този случай ще бъде име на файл.
  • .* работят заедно, за да покажат, че името на файла може да съдържа произволен брой от всякакви знаци, но без нови редове.
  • .php започва с символ за бягство, който гарантира, че точката се интерпретира като буквален, а не като специален символ. На следващо място, буквалните букви php означават, че след името на файла, ние искаме да проверим за комбинацията от точка и буквите php.
  • $ показва, че разширението .php трябва да се появи в края на низ за търсене, за да бъде съвпадение.

Както можете да видите, само за девет знака този регекс успява да създаде логически модел, който може да пресее сложни имена на файлове и да определи тези, които завършват с разширението на .php файла.

Unicode и Regex

Един от проблемите, които могат да се появят при справяне с regex, е как да се справим с езици, които използват знаци, които не са част от съвременната английска азбука. Unicode е стандарт за кодиране, който се опитва да реши този проблем чрез кодиране на цифри в числови стойности.

Някои реализации на регекс поддържат използването на Unicode за изграждане на модели на регулярни генери, което означава, че могат да бъдат създадени шаблони, които ще могат да тестват низове, които включват символи от различни езици. В допълнение, изразите на Unicode могат да се комбинират с литерали и специални символи за изграждане на сложни модели на регулярни выражения.

Някои от най-разпространените модели на регекс на Unicode включват:

  • p {L}: Съответства на всяка буква на който и да е език. И така, p {L} {2,4} съответства на всяка последователност от букви между два и четири знака.
  • p {Z}: Съответства на всички символи с интервал.
  • p {N}: Съответства на цифрови символи.
  • p {P}: Съответства на препинателните знаци.

Има много допълнителни свойства на Unicode, които можете да използвате при изграждането на регулярни изрази, при условие че реализацията, с която работите, поддържа Regex на Unicode. За да научите повече, прочетете Unicode Regular Expressions на Regular-Expressions.info.

ресурси

Ние покрихме достатъчно точно в този грунд, за да ви дадем основен усет за това как работи регулярно изражение и как можете да го използвате, за да определите конкретни битове код и текст в текстов редактор или да идентифицирате и утвърдите данни в компютърно приложение. За да научите повече, разгледайте следващите ресурси, които предоставиха по-разширена информация от тази, която сме обхванали в този кратък урок:

  • Regular-Expressions.info: богатство от знания за регекс под формата на статии и уроци.
  • Regex Cheatsheet от RegExLib.com: полезен махляр, който ще ви помогне да поддържате всички различни специални символи прави.
  • RegExLib.com: безплатно хранилище на регулярни изрази, което можете да копирате и променяте според вашите нужди.

Един от най-добрите начини да се свържете с писането на редовни изрази е да започнете да ги пишете. Следните онлайн инструменти ще ви позволят да направите точно това, сравнявайки персонализирания си регекс с блок с персонализиран текст в движение, за да можете да разберете как да формулирате регулярни изрази, които работят:

  • RegExr: маркерът казва всичко „Научете, изградете и тествайте RegEx.“
  • Regex Pal: създайте шаблон за регекс и след това тествайте низове срещу него, за да сте сигурни, че прави точно това, което искате да направи.
  • Regex 101: не всички реализации на regex са създадени равни. Използвайте този инструмент за тестване на низове спрямо образец на регекс и фино настройване на поведението въз основа на езика за програмиране, където ще внедрите шаблона. PHP, JavaScript, Python и Erlang се поддържат.

Доста текстове са написани за регекс, но три се открояват като най-добри в класа. Ако наистина искате да овладеете регекс, всеки един от тези три текста ще извърви дълъг път към вас:

  • Готварска книга с регулярни изрази: подробни решения на осем езика на програмиране (2012) от Goyvaerts и Levithan
  • Въвеждане на регулярни изрази (2012) от Майкъл Фицджералд
  • Овладяване на регулярни изрази (2006) от Джефри Е Ф Фридл.

резюме

Редовните изрази са независим от езика инструмент, използван от компютърните програмисти за изграждане на логически модели. Тези модели след това могат да бъдат използвани за идентифициране на текстови низове, които отговарят на шаблона. Реализациите на Regex изобилстват и regex се поддържа от повечето съвременни езици за програмиране и се предлага в инструментите за търсене, вградени в много текстови редактори. Първите стъпки с regex могат да бъдат трудни, но овладяването на regex е необходима стъпка в развитието на всеки компютърен програмист.

Допълнително четене и ресурси

Имаме още ръководства, ръководства и инфографика, свързани с компютрите и кодирането:

  • Ресурси за програмиране на Bash: започнете с най-важната обвивка на командния ред Unix.
  • Въведение и ресурси на Sed: редакторът на потоци е чудесен инструмент за използване и усвояване на регулярни изрази.
  • Ресурси на Awk: научете всичко за сестринския инструмент Awk.

Най-добрият списък с инструменти за уеб администратори A-Z

Sed и Awk и Bash са само част от голяма колекция от инструменти, които позволяват на системните администратори да управляват операционни системи. Най-добрият списък с инструменти за уеб администратори A-Z ще ви осигури много помощ при извършването на вашата работа.

Най-добрият списък с инструменти за уеб администратори A-Z
Най-добрият списък с инструменти за уеб администратори A-Z

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map