Styga iš pabėgimo erdvių
Eilutė gali būti sukonstruota pakeičiant kiekvieną tarpą tarpo pabėgimo seka, „“; kaip ir:
myVar= Turizmas į Egiptas yra viena šalies 's pirmaujančios ekonominės pramonės šakos.
išmetė $ myVar
Išėjimas yra:
Turizmas Egipte yra viena iš pirmaujančių šalies ekonomikos pramonės šakų.
Pastaba: apostrofas taip pat naudojo pabėgimo iš kosmoso seką.
Eilutė pagal vieną citatą
Ar programuotojas turi laiko pabėgti iš visų eilutės tarpų? Ne. Todėl geriau naudoti dvi kabutes eilutėms atskirti; toks kaip:
myVar=„Turizmas Egipte yra viena iš šalių“ 'pirmaujanti ekonomikos pramonė “.Vienos kabutės eilutė neleidžia išplėsti (pakeisti jos poveikiu) jokios pabėgimo sekos. Laimei, jei dvi eilutės yra užkoduotos viena šalia kitos, jos bus laikomos viena eilute. Pabėgimo seka gali būti įterpta tarp jų, kaip nurodyta aukščiau. Pabėgimo seka būtų išplėsta. Taigi išvestis tampa tokia:
Turizmas Egipte yra viena iš pirmaujančių šalies ekonomikos pramonės šakų.
Dvigubų kabučių eilutė
Naudojant dvigubas kabutes, pabėgimo sekos taip pat nėra išplėstos, bet kintamieji. Toliau pateiktas kodas tai iliustruoja:
myVar= Turizmas į Egiptas yra viena šalies 's pirmaujančios ekonominės pramonės šakos.išmetė $ myVar
Išėjimas yra:
Turizmas Egipte yra viena iš pirmaujančių šalies ekonomikos pramonės šakų.
Pastaba: apostrofas taip pat naudojo pabėgimo iš kosmoso seką.
Šiame straipsnyje pagrindinis nagrinėjamas eilutės tipas yra eilutė viengubose kabutėse.
Reguliariosios išraiškos pagrindai
Reguliariai
Apsvarstykite šią eilutę:
Šis pasaulis tikrai nėra mūsų namai.
Tegul pasaulis yra interesų grandinė. Tada didelė eilutė (visa eilutė) vadinama tiksline eilute arba tiesiog tikslu. „Pasaulis“ kabutėse vadinamas reguliariąja išraiška arba tiesiog regex. Turinys, pasaulis, yra modelis, šiuo atveju.
Paprastas derinimas
Toliau pateiktame kode, jei tiksle randamas žodis „pasaulis“, sakytume, kad žodis atitiko.
p=„Šis pasaulis tikrai nėra mūsų namai“.reg='pasaulis'
jei [[ $ str= ~$ reg ]];tada
išmetėrasta
Kitas
išmetėnerastas
būti
= ~, kuris yra priskyrimo operatorius, po kurio eina ~, vadinamas įrišimo operatoriumi. Sąlyga patikrina, ar modelis atitinka tikslinę eilutę. Jei taikinyje randama šabloną atitinkanti antrinė eilutė, echo sakinys rodo, kad rasta. Jei jis nerastas, aido teiginys aidi nerastas. Šio kodo išvestis yra tokia:
rasta
Kaip modelis, pasaulis, randamas taikinyje. Atminkite, kad skiriamoji erdvė po [[ir prieš]] buvo išsaugota.
Raštas
Pirmiau pateiktame kode „kaboje esantis pasaulis“ yra reguliarusis reiškinys, o pats pasaulis yra modelis. Tai paprastas modelis. Tačiau dauguma modelių nėra tokie paprasti. Modelis yra surandamos antrinės eilutės apibūdinimas. Taigi „Bash“ modelis naudoja tam tikrus metaženklus. Meta simbolis yra simbolis apie kitus simbolius. Pavyzdžiui, „Bash Pattern“ naudoja šiuos meta simbolius:
^ $ . * +? () [] {} |
Įprasta išraiška taip pat gali būti įvesta sąlyginėse dvigubose skliausteliuose. Bet tai nebūtinai turi būti kabutėse. Taigi, šiuo atveju tai yra pažodžiui, modelis.
Simbolių klasės
Laužtiniai skliaustai
Rasta šio kodo išvestis, tai reiškia, kad įvyko atitiktis:
p='Katė atėjo į kamerą'.jei [[ $ str= ~[br]adresu]];tada
išmetėrasta
būti
Modelis [cbr] at atitinka katę, prasidedančią „c“, kuri tęsiasi ir baigiasi at. [cbr] at reiškia, sutapkite „c“ arba „b“ arba „r“, po to - at.
Rasta šio kodo išvestis, tai reiškia, kad įvyko atitiktis:
p=- Šikšnosparnis atėjo į kamerą.jei [[ $ str= ~[br]adresu]];tada
išmetėrasta
būti
Modelis [cbr] at atitinka šikšnosparnį, prasidedantį „b“, kuris tęsiasi ir baigiasi at. [cbr] at reiškia, sutapkite „c“ arba „b“ arba „r“, po to - at.
Rasta šio kodo išvestis, tai reiškia, kad įvyko atitiktis:
p=„Žiurkė atėjo į kamerą“.jei [[ $ str= ~[br]adresu]];tada
išmetėrasta
būti
Modelis [cbr] at atitinka žiurkę, kuri prasideda „r“ ir tęsiasi ir baigiasi at.
Aukščiau pateiktuose kodo pavyzdžiuose programuotojas nežino, ar tikslinėje eilutėje yra katė, šikšnosparnis ar žiurkė. Tačiau jis žino, kad antrinė eilutė prasideda „c“, „b“ arba „r“, tada tęsiasi ir baigiasi at. Kvadratiniai skliausteliai šablone leidžia skirtingiems galimiems simboliams sutapti su vienu simboliu tam tikroje pozicijoje, palyginti su kitais taikinio objektais. Taigi, skliausteliuose yra simbolių rinkinys, iš kurių vienas atitinka antrinę eilutę. Galiausiai sutampa visa antrinė eilutė.
Veikėjų asortimentas
Pirmiau pateiktas kodas [cbr] yra klasė. Net jei „c“, „b“ arba „r“ atitinka vieną simbolį, jei po to iš karto neatitinka, modelis neatitiks nieko.
Na, yra tam tikri diapazonai, kurie sudarys klasę. Pavyzdžiui, klasę sudaro nuo 0 iki 9 skaitmenų, [0–9], įskaitant 0 ir 9. Mažosios raidės nuo „a“ iki „z“ sudaro klasę [a – z], įskaitant „a“ ir „z“. Didžiosios raidės nuo „A“ iki „Z“ sudaro klasę [A-Z], įskaitant „A“ ir „Z“. Iš klasės tai yra vienas iš simbolių, kuris atitiktų vieną eilutės simbolį.
Šis kodas sukuria atitiktį:
jei [[ „ID8id“= ~[0-9] ]];tadaišmetėrasta
būti
Šį kartą tikslas yra pažodinė būsenos eilutė. 8, kuris yra vienas iš galimų skaičių diapazone, [0-9], atitinka 8 eilutėje „ID8id“. Aukščiau pateiktas kodas yra lygus:
jei [[ „ID8id“= ~[0123456789] ]];tadaišmetėrasta
būti
Čia visi galimi skaičiai buvo parašyti šablone, todėl nėra brūkšnelio.
Pagal šį kodą gaunama atitiktis:
jei [[ „ID8iD“= ~[a-z] ]];tadaišmetėrasta
būti
Atitikimas yra tarp mažųjų diapazono „i“ diapazono [a – z] ir mažosios „i“ tikslinės eilutės „ID8iD“.
Atminkite: diapazonas yra klasė. Klasė gali būti didesnio modelio dalis. Taigi šablone tekstas gali būti prieš pamoką ir (arba) po jos. Toliau pateiktas kodas tai iliustruoja:
jei [[ „ID8id yra identifikatorius“= ~ ID[0-9]id ]];tadaišmetėrasta
būti
Išvestis: rasta. „ID8id“ iš modelio atitiko „ID8id“ tikslinėje eilutėje.
Neigimas
Atitiktis negaunama naudojant šį kodą:
jei [[ „0123456789101112“= ~[^0-9] ]];tadaišmetėrasta
Kitas
išmetėnerastas
būti
Išėjimas yra:
nerastas
Be ^ prieš diapazoną, laužtiniuose skliaustuose, diapazono nulis atitiktų pirmąjį tikslinės eilutės nulį. Taigi, ^ prieš diapazoną (arba pasirenkamus simbolius) paneigia klasę.
Šis kodas sukuria atitiktį, nes sąlyga skamba taip: kad atitiktų bet kurį neskaitinį simbolį bet kurioje taikinio vietoje:
jei [[ „ABCDEFGHIJ“= ~[^0-9] ]];tadaišmetėrasta
Kitas
išmetėnerastas
būti
Taigi išvestis yra: rasta.
[^0-9] reiškia neskaitmenį, todėl [^0-9] yra [0-9] neigimas.
[^a-z] reiškia ne mažąsias raides, todėl [^a-z] yra [a-z] neigimas.
[^A-Z] reiškia ne didžiąsias raides, todėl [^A-Z] yra [A-Z] neigimas.
Galimi ir kiti neigimai.
Laikotarpis (.) Šablone
Šablono laikotarpis (.) Atitinka bet kurį simbolį, įskaitant jį patį. Apsvarstykite šį kodą:
jei [[ „6759WXY.A3“= ~ 7.9W.Y.A]];tadaišmetėrasta
būti
Kodo išvestis randama, nes kiti simboliai sutampa. Vienas taškas atitinka „5“; kitas taškas atitinka „X“; o paskutinis taškas sutampa su tašku.
Atitinkama pakaitalas
Apsvarstykite šį sakinį tikslinei eilutei:
Narvelyje yra įvairių rūšių paukščių.
Kažkas gali norėti sužinoti, ar šis tikslas yra balandis, povas ar erelis. Galima naudoti šį kodą:
p=„Narvelyje yra įvairių tipų povų“.jei [[ $ str= ~ balandis|povas|erelis]];tada
išmetėrasta
Kitas
išmetėnerastas
būti
Išėjimas yra, rastas. Kintamoji metaženklis, | buvo įdarbintas. Gali būti dvi, trys, keturios ir daugiau alternatyvų. Šiame kode yra „povas“.
Grupavimas
Toliau pateiktame pavyzdyje skliausteliai buvo naudojami simboliams grupuoti:
scena (šokėja)
Grupė čia yra scenos šokėja, apsupta meta simbolių (ir). (šokėjas) yra pogrupis, o scena (šokėja) - visa grupė. Apsvarstykite šiuos dalykus:
(Šokėja nuostabi)
Čia pogrupis arba substring yra, šokėjas yra nuostabus.
Antrinės eilutės su bendrosiomis dalimis
Suinteresuotas asmuo yra asmuo, suinteresuotas verslu. Įsivaizduokite verslą, turintį svetainę „pea.com“. Įsivaizduokite, kad kompiuteryje yra viena iš šių tikslinių eilučių:
Tinklalapis, portal.com yra skirtas verslui .;
Yra suinteresuotas asmuo.;
Suinteresuotoji šalis dirba už portal.com .;
Tegul bet kuri iš šių eilučių yra taikinys. Programuotojas gali norėti sužinoti, ar statymas.com ar suinteresuotoji šalis yra bet kurioje tikslinėje eilutėje. Jo modelis būtų toks:
svarus.com | suinteresuotas asmuo
naudojant pakaitą.
statymas du kartus buvo įvestas dviem žodžiais. To galima išvengti įvedus šabloną taip:
akcijų paketas (.com | turėtojas)
.com | turėtojas šiuo atveju yra pogrupis.
Pastaba: šiuo atveju naudojamas pakaitinis simbolis. bus daroma paieška adresu Rasta šio kodo išvestis:
p=„Svetainė,„ portal.com “skirta verslui.“jei [[ $ str= ~ statymas(.su|laikiklis) ]];tada
išmetėrasta
būti
Čia sutapatinta antrinė eilutė yra pastatyta.com.
„BASH_REMATCH“ iš anksto nustatytas masyvas
BASH_REMATCH yra iš anksto nustatytas masyvas. Tarkime, kad modelis turi grupes. Visa grupė sutapo, eina į šio masyvo indekso 0 langelį. Pirmasis pogrupis sutampa, eina į 1 indekso langelį; antrasis pogrupis sutapo, eina į 2 indekso langelį ir pan. Šis kodas parodo, kaip naudoti šį masyvą:
p=„Atėjo scenos šokėjas“.jei [[ $ str= ~ etapas (šokėjas) ]];tada
išmetėrasta
būti
dėliį $ {! BASH_REMATCH [@]};daryti
printf '{BASH_REMATCH [i]} USD, '
padaryta
išmetė
Išėjimas yra:
rasta
scenos šokėjas, šokėjas,
Visa grupė yra scenos šokėja. Yra tik vienas pogrupis, kuris yra šokėjas.
Pastaba: šablono tarpas praleistas.
Didžiosios/mažosios raidės nepriklausomybės atitikimas
Atitiktis, kaip paaiškinta aukščiau, neskiria didžiųjų ir mažųjų raidžių. Derinimas gali būti atliekamas nepriklausomai nuo bylos. Tai pavaizduota šiame kode:
parduotuvės -snocasematchp=„Mums patinka gera muzika“.
jei [[ $ str= ~ GoOd]];tada
išmetėrasta
būti
parduotuvės -unocasematch
Išvestis: rasta. Modelis yra „GoOd“. Suderinta antrinė eilutė yra „gera“. Atkreipkite dėmesį, kaip nocasematch parinktis buvo įjungta kodo segmento pradžioje ir išjungta kodo segmento pabaigoje.
Stygos ilgis
Sintaksė norint gauti eilutės ilgį yra:
$ {#PARAMETER}Pavyzdys:
p=„Mums patinka gera muzika“.išmetė $ {# str}
Rezultatas: 19.
Styginių mažinimas
Eilutės mažinimo sintaksės yra šios:
$ {PARAMETER: OFFSET}$ {PARAMETER: OFFSET: LENGTH}
kur poslinkio skaičiavimas prasideda nuo nulio.
Šiame pavyzdyje parodyta, kaip pašalinti pirmuosius 11 eilutės simbolių:
p='Aš visada šokau pagal gerą muziką.'išmetė $ {str: 10}
Išėjimas yra:
gera muzika.
Skaičiuojant LENGTH, prasideda nuo kito simbolio. Šis kodas parodo, kaip galima leisti eilutės dalį:
p='Aš visada šokau pagal gerą muziką.'išmetė $ {str: 10: 6}
Išėjimas yra:
ance t
Pirmieji 11 simbolių buvo pašalinti; buvo leidžiami kiti 6 simboliai, o likę simboliai buvo automatiškai pašalinti.
Ieškoti ir pakeisti
Radus antrinę eilutę, ją galima pakeisti kita eilute. Tam naudojamos sintaksės:
kur=$ {PARAMETER/PATTERN/REPLACEMENT}kur=$ {PARAMETER // PATTERN/REPLACEMENT}
kur=$ {PARAMETER/PATTERN}
kur=$ {PARAMETER // PATTERN}
Pirmoje sintaksėje su vienu pasviruoju brūkšniu pakeičiama tik pirmoji atitiktis. Pavyzdys:
p=„Kameroje yra žiurkė, šikšnosparnis ir katė“.teisingai=$ {str/[cbr] at/big cow}
išmetė $ str
išmetė $ ret
Išėjimas yra:
Kameroje yra žiurkė, šikšnosparnis ir katė.
Kameroje yra didelė karvė, šikšnosparnis ir katė.
Antrojoje sintaksėje su dvigubais brūkšniais į priekį pakeičiami visi rungtynių įvykiai. Pavyzdys:
p=„Kameroje yra žiurkė, šikšnosparnis ir katė“.teisingai=$ {str // [cbr] at/big cow}
išmetė $ str
išmetė $ ret
Išėjimas yra:
Kameroje yra žiurkė, šikšnosparnis ir katė.
Kameroje yra didelė karvė, didelė karvė ir didelė karvė.
Trečiosios sintaksės su vienu pasviruoju brūkšniu atveju pirmosios ir vienintelės rungtynės nepakeičiamos.
Be to, pirmoji rasta antrinė eilutė ištrinama. Pavyzdys:
p=„Kameroje yra žiurkė, šikšnosparnis ir katė“.teisingai={str/[cbr] $}
išmetė $ str
išmetė $ ret
Ketvirtoji sintaksė su dvigubais brūkšniais į priekį nekeičia visų rungtynių. Be to, visos rastos antrinės eilutės ištrinamos. Pavyzdys:
p=„Kameroje yra žiurkė, šikšnosparnis ir katė“.teisingai=$ {str // [cbr] at}
išmetė $ str
išmetė $ ret
Išėjimas yra:
Kameroje yra žiurkė, šikšnosparnis ir katė.
Kameroje yra a, a ir a.
Išvada
Norint patikrinti, ar eilutėje yra antraštė „Bash“, reikia naudoti šablonų atitiktį. Šablonų derinimas vyksta ne tik esant dviguboms skliausteliams, [[. . . ]]. Tai taip pat gali būti išplėsta naudojant parametrus, kurių $ {. . .}. Išplėtus parametrus, galima gauti antrinę eilutę pagal indeksus.
Šiame straipsnyje pateikiami svarbiausi modelių atitikimo taškai. Yra daugiau! Tačiau tai, ką skaitytojas turėtų išstudijuoti toliau, yra failo vardo išplėtimas.