Sāciet darbu ar Regex: regulārie izteicieni ir ērti

Atklāšana: Jūsu atbalsts palīdz vietnei darboties! Mēs nopelnām nodošanas maksu par dažiem pakalpojumiem, kurus mēs iesakām šajā lapā.


Regulārā izteiksme, regex vai regexp, ir burtu un simbolu secība, kas nosaka loģisko modeli. Pēc tam teksta virknes var salīdzināt ar modeli, lai identificētu virknes, kas atbilst regeksa noteiktajam loģiskajam modelim. Balstoties uz šo salīdzinājumu, regex var izmantot, lai identificētu teksta virknes, kas atbilst īpašām prasībām, vai lai apstiprinātu, ka virknes atbilst prasītajam modelim.

Ja šis regex skaidrojums šķiet mazliet abstrakts, iespējams, apskatot dažus izplatītus regex izmantošanas veidus, tiks noskaidrota to lietderība. Regex datorprogrammēšanā izmanto visu laiku. Piemēram, šeit ir daži izplatīti regex izmantošanas veidi:

  • Lai apstiprinātu, ka tīmekļa formā ievadīta e-pasta adrese ir pareizi noformēta e-pasta adrese.
  • Lai identificētu visus failus datorsistēmā, kas beidzas ar noteiktu faila paplašinājumu.
  • Lai pārbaudītu tīmekļa servera pieprasītos URL un veiktu novirzīšanu, ja vietrāži URL atbilst regex modelim.

Ir svarīgi saprast, ka regex ir loģiska sistēma rakstu aprakstīšanai, nevis valoda. Tomēr regex ir ieviests daudzās dažādās programmēšanas valodās, un to var izmantot arī teksta meklēšanai daudzos teksta redaktoros.

Regex vēsture

Regex tika iecerēts kā teorētisks datorzinātnes princips, kad to 1956. gadā izveidoja matemātiķis Stefans Kols Kleēns. Sākumā regex bija tīri teorētiska. Tomēr 1968. gadā tas pirmo reizi tika izmantots datora lietojumprogrammā, kad Kens Tompsons to iekļāva QED teksta redaktorā. Tompsons nebija vienīgais, pieņemot regeksu. Aptuveni tajā pašā laikā Douglas T Ross kompilātājā iekļāva regex leksiskās analīzes veikšanai.

Drīz sekoja šīs pirmās regex ieviešanas. 70. gadu sākumā Unix teksta redaktorā, ed., Tika pievienoti regex loģiski paraugi. Neilgi pēc tam regex parsētājs, kas iebūvēts ed, tika izlaists kā patstāvīga Unix utilīta, ko sauc grep. Tajā brīdī bija tikai laika jautājums, pirms regex atbalsts tika iekļauts daudzos Unix utilītos un lietojumprogrammās, ieskaitot vi, lex, sed, Awk, expr, Emacs un citas..

Laikā, kad Regex bija atradis ceļu uz dažādiem Unix operētājsistēmas stūriem, tā bija iesakņojusies. Tomēr uzlabojumu vēl bija. Tātad oriģinālā regex sintakse, ko izstrādāja Kleene, tika uzlabota 1980. gados, kad Perl tika pievienots atbalsts paplašinātiem regex modeļiem, pamatojoties uz Henry Spencer sarakstīto paplašināto regex bibliotēku. Tomēr pat pēc regex pievienošanas Perlam Spenseram turpināja izvērst šo ideju, un vēlāka un modernāka viņa bibliotēkas atkārtošana tika iebūvēta Tcl programmēšanas valodā – un šī ieviešana galu galā kļuva par augsta līmeņa moderniem informācijas pārvaldības projektiem. piemēram, PostgreSQL.

Astoņdesmitajos gados regex nekad netika standartizēts. Tomēr tas mainījās 1992. gadā, kad regex tika standartizēts POSIX.2. Mūsdienās regex atbalsta daudzas dažādas programmēšanas valodas un teksta redaktori. Lielākā daļa mūsdienu ieviešanu ir savietojamas ar POSIX, taču parasti tās paplašina POSIX standartu dažādos veidos, kas atšķiras atkarībā no ieviešanas. Rezultātā, lai gan pamata regex modeļi parasti sakrīt no vienas ieviešanas uz otru, uzlabotās shēmas var ievērojami atšķirties atkarībā no vides, kurā tās tiek izmantotas..

Kā darbojas Regex

Regulārā izteiksme ir divu veidu rakstzīmju kombinācija: burtus un speciālās rakstzīmes. Kombinācijā šīs rakstzīmes nosaka loģisko modeli. Teksta virknes var salīdzināt ar šo modeli, lai redzētu, vai tās atbilst modelim, kuru nosaka izteiksme.

Burtiski personāži pārstāv sevi. Tas nozīmē, ka burtam a ir burts a un burtam 1 ir cipars 1. Tomēr regex nav ļoti vērtīgs, ja aprobežojas ar burtiem. Īpašās rakstzīmes padara regex noderīgus.

Īpašajām rakstzīmēm ir loģiska nozīme regex modelī. Piemēram, apskatīsim punktu. Punkts vai punkts tiek izmantots, lai attēlotu jebkuru rakstzīmi. Tātad .a atbilstu jebkurai divu rakstzīmju secībai, kurā otrais raksturs bija burtiskais a. Tas nozīmē, ka ba, 1a, -a, aa un burts a, pirms kura ir tukša vieta, visi sakristu ar šo regex modeli.

Punkts nav vienīgais regeksa īpašais raksturs. Ir ap ducis īpašo rakstzīmju, kuras var apvienot ar burtiem, lai aprakstītu sarežģītus loģiskos modeļus. Apskatīsim divus piemērus, kā burtus un speciālās rakstzīmes apvieno, lai definētu sarežģītas izteiksmes:

  • Ja vēlaties pārliecināties, vai teksta virkne ir e-pasta adrese, varat to pārbaudīt, izmantojot šo regex modeli: ^ [A-Z0-9 ._% + -] [aizsargāts ar e-pastu] [A-Z0-9.-] +. [AZ] {2,} $.
  • Lai skenētu failu nosaukumus un noķertu visus, kas beidzās ar .php faila paplašinājumu, varat izmantot šādu regex: ^. *. Php $.

Ja esat jauns regex dalībnieks, šie modeļi, iespējams, ir diezgan mulsinoši. Lai saprastu, kā šie modeļi darbojas, jums ir jāsaprot, ko nozīmē visi īpašie burti.

Regex īpašās rakstzīmes

Lai gan katra regex ieviešana dažos aspektos nedaudz atšķiras, parasti tie visi izturas pret šīm īpašajām rakstzīmēm vienādi ar dažiem izņēmumiem.

  • : Slīpsvītru izmanto, lai izvairītos no citām īpašajām rakstzīmēm. Tātad, ja vēlaties izbēgt no citas rakstzīmes, piemēram, punkta, lai to interpretētu kā burtisku rakstzīmi, jūs to varētu izdarīt, pirms dot punktu ar slīpsvītru šādi: .
  • ^: Uptick tiek izmantots, lai norādītu sākuma pozīciju virknē. Regex ^ a atbilstu jebkurai virknei, kas sākas ar burtu a.
  • $: Dolāra zīme tiek izmantota, lai saskaņotu virknes beigu pozīciju. Regex a $ atbilst jebkurai virknei, kas beidzas ar burtu a.
  • .: Punkts vai punkts atbilst jebkurai rakstzīmei, izņemot jaunrindas (n) rakstzīmi. Regex 1.3 saderēs jebkuru virkni ar burtisku, jebkuru rakstzīmi un burtisku trīs, piemēram, 123, 1a3 un pat 1 3.
  • |: Vertikālā caurule ir izvēles operators, un to var interpretēt kā vārda vai. Tātad regex a | b varētu lasīt kā “a vai b” un atbilstu vai nu burtam a, vai b.
  • *: Tiek izmantota zvaigznīte, lai iepriekšējā rakstzīme atbilstu nullei vai vairāk reizes. Tātad regex. * Vispār atbilstu jebkurai virknei, ja vien tajā nebūtu jaunrindas rakstzīmes.
  • ?: Jautājuma zīme sakrīt ar iepriekšējo rakstzīmi nulle vai vienu reizi, bet ne vairāk. Regex 123? tāpēc atbilstu vai nu 12, vai 123.
  • +Plus zīmes simbols sakrīt ar iepriekšējo rakstzīmi vienu vai vairākas reizes, bet rakstzīmei ir jāparādās vismaz vienu reizi atšķirībā no zvaigznītes, kas atbilst iepriekšējai rakstzīmei nulle vai vairāk reizes. Tātad, regex a * b + sakrīt ar ab un b, bet ne a, jo b ir jāparādās vismaz vienu reizi plus zīmes izmantošanas dēļ.
  • […]: Iekavām ir viena rakstzīme, kas atrodas iekavās. Vai arī var pievienot uptick, piemēram, šo [^ …], lai tas atbilstu jebkurai rakstzīmei, kas nav iekavās. Jums nav jāizvairās no īpašajām rakstzīmēm iekavās, tās tiks interpretētas kā burtus. Iekavās bieži izmanto, lai definētu rakstzīmju diapazonus. Piemēram, regex [0-9] atbilstu jebkuram ciparam un [A-Z] atbilstu jebkuram lielajam burtam angļu valodas alfabētā. Visbeidzot, iekavās var būt rakstzīmes, atdalītas ar komatu. Tātad [a, g] sakrīt ar vienu no burtiem a un g.
  • {…}: Cirtaini bikšturi, ko sauc par izteiktiem skaitļiem, norāda, cik reizes jāparādās iepriekšējai rakstzīmei. Ar regex ab {2} c var iepazīties tikai ar abbc. Otro numuru var pievienot, lai izveidotu pieņemamu vērtību diapazonu. Tātad ab {2,3} c sakrīt ar abc vai abbbc un [0-9] {1,2} sakrīt ar vienu vai divu ciparu skaitli.
  • (…): Aizzīmētājus izmanto, lai lielākā izteiksmē apzīmētu subexpression. Tātad regex (abc) * atbilst jebkurai virknei, kas sastāv no burtiem abc, bet visiem trim burtiem ir jāparādās kopā un šādā secībā.

Atsevišķi varoņi ir noderīgi. Šīs īpašās rakstzīmes apvienojumā ar burtiem var aprakstīt spēcīgus modeļus. Iepriekš sniegtais speciālo rakstzīmju saraksts satur dažas vienkāršas speciālo rakstzīmju kombinācijas. Otrreiz apskatīsim regex, lai identificētu PHP failus, lai redzētu, kā šīs rakstzīmes darbojas kopā.

Šeit ir apskatāmais regex: ^. *. Php $. Paņemsim to vienu gabalu vienlaicīgi.

  • ^ norāda testa virknes sākumu, kas šajā gadījumā būtu faila nosaukums.
  • .* strādā kopā, lai norādītu, ka faila nosaukumā var būt neierobežots skaits rakstzīmju, bet nav rindas.
  • .php sākas ar aizbēgšanas rakstzīmi, kas nodrošina, ka punkts tiek interpretēts kā burtisks, nevis kā īpašs raksturs. Tālāk burti php norāda, ka pēc faila nosaukuma mēs vēlamies pārbaudīt punktu un burtu php kombināciju.
  • $ norāda, ka .php paplašinājumam ir jāparādās meklēšanas virknes beigās, lai tas atbilstu.

Kā redzat, tikai deviņās rakstzīmēs šim regex izdodas izveidot loģisku modeli, kas var izsijāt cauri sarežģītiem failu nosaukumiem un precīzi noteikt tos, kas beidzas ar .php faila paplašinājumu.

Unicode un Regex

Viena no problēmām, kas var rasties, strādājot ar regex, ir tas, kā rīkoties valodās, kurās tiek izmantotas rakstzīmes, kas neietilpst mūsdienu angļu alfabētā. Unicode ir kodēšanas standarts, kas mēģina atrisināt šo problēmu, kodējot ciparus skaitliskās vērtībās.

Daži regex implementācijas atbalsta Unicode izmantošanu regex modeļu veidošanai, tas nozīmē, ka var izveidot regex modeļus, kas spēs pārbaudīt virknes, kurās iekļautas rakstzīmes no dažādām valodām. Turklāt Unicode izteiksmes var kombinēt ar burtiem un speciālajām rakstzīmēm, lai izveidotu sarežģītus regex modeļus.

Daži no visizplatītākajiem Unicode regex modeļiem:

  • p {L}: atbilst jebkuram burtam jebkurā valodā. Tātad p {L} {2,4} atbilst jebkurai burtu secībai no divām līdz četrām rakstzīmēm.
  • p {Z}: atbilst jebkurām atstarpes zīmēm.
  • p {N}: atbilst ciparu rakstzīmēm.
  • p {P}: atbilst pieturzīmēm.

Ir daudz citu Unicode rekvizītu, kurus varat izmantot, veidojot regulāras izteiksmes, ja vien ieviešana, ar kuru strādājat, atbalsta Unicode regex. Lai uzzinātu vairāk, izlasiet Unicode regulāros izteicienus vietnē Regular-Expressions.info.

Resursi

Mēs esam tikuši pietiekami apskatīti šajā gruntējumā, lai sniegtu jums pamata izjūtu par to, kā regex darbojas un kā jūs to varat izmantot, lai teksta redaktorā precīzi noteiktu konkrētus koda un teksta bitus vai identificētu un apstiprinātu datus datora lietojumprogrammā. Lai uzzinātu vairāk, iepazīstieties ar šiem resursiem, kas sniedza detalizētāku informāciju nekā tas, ko mēs apskatījām šajā īsajā apmācībā:

  • Regular-Expressions.info: plašas zināšanas par regex rakstu un apmācību veidā.
  • Regex Cheatsheet no RegExLib.com: noderīga cheatsheet, kas palīdzēs jums saglabāt visas dažādās īpašās rakstzīmes taisni.
  • RegExLib.com: bezmaksas regulāru izteiksmju krātuve, kuru varat kopēt un modificēt atbilstoši savām vajadzībām.

Viens no labākajiem veidiem, kā panākt regulāru izteicienu rakstīšanu, ir sākt tos rakstīt. Šie tiešsaistes rīki ļaus jums to izdarīt, salīdzinot savu pielāgoto regex ar pielāgota teksta bloku lidojuma laikā, lai jūs varētu izdomāt, kā noformulēt regulāras izteiksmes, kas darbojas:

  • RegExr: virsraksts saka visu: “Uzziniet, izveidojiet un pārbaudiet RegEx”.
  • Regex Pal: izveidojiet regex modeli un pēc tam pārbaudiet virknes pret to, lai pārliecinātos, ka tas dara tieši to, ko vēlaties darīt.
  • Regex 101: ne visas regex implementācijas ir izveidotas vienādas. Izmantojiet šo rīku, lai pārbaudītu virknes atbilstoši regex modelim un precīzi noskaņotai darbībai, pamatojoties uz programmēšanas valodu, kurā ieviesīsit shēmu. Tiek atbalstīti PHP, JavaScript, Python un Erlang.

Diezgan daudz tekstu ir rakstīts par regex, bet trīs izceļas kā labākie klasē. Ja jūs patiešām vēlaties apgūt reksiku, jebkurš no šiem trim tekstiem palīdzēs jums nokļūt tur:

  • Parasto izteicienu pavārgrāmata: Detalizēti risinājumi astoņās programmēšanas valodās (2012), autori Goyvaerts un Levithan
  • Iepazīstinām ar Maikla Ficdžeralda regulārajām izpausmēm (2012)
  • Regulāro izteicienu apgūšana (2006), Džefrijs E Frīdijs.

Kopsavilkums

Regulārie izteicieni ir no valodas neatkarīgs rīks, ko datorprogrammētāji izmanto loģisko modeļu izveidošanai. Pēc tam šos modeļus var izmantot, lai identificētu tekstam atbilstošās teksta virknes. Regex ieviešanu ir daudz, un regex atbalsta modernākās programmēšanas valodas, un tās ir pieejamas meklēšanas rīkos, kas iebūvēti daudzos teksta redaktoros. Sākt darbu ar regex var būt sarežģīti, taču regex apgūšana ir nepieciešams solis jebkura datorprogrammētāja izstrādē..

Papildu lasīšana un resursi

Mums ir vairāk rokasgrāmatu, mācību materiālu un infografiku, kas saistīti ar datoriem un kodēšanu:

  • Baša programmēšanas resursi: sāciet darbu ar vissvarīgāko Unix komandrindas apvalku.
  • Sed ievads un resursi: straumes redaktors ir lielisks rīks regulāru izteiksmju izmantošanai un apguvei.
  • Awk resursi: uzziniet visu par sed māsas rīku Awk.

Tīmekļa pārziņa rīku galīgais saraksts A-Z

Seds, Awks un Bašs ir tikai daļa no lielā rīku kolekcijas, kas ļauj sistēmas administratoriem pārvaldīt operētājsistēmas. Tīmekļa pārziņa rīku galīgais saraksts A-Z sniegs jums daudz palīdzības, veicot savu darbu.

Tīmekļa pārziņa rīku galīgais saraksts A-Z
Tīmekļa pārziņa rīku galīgais saraksts A-Z

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me