Virkne pēc izbēgušām telpām
Virkni var veidot, aizstājot katru atstarpi ar atstarpes atstarpes secību, ‘’; kā:
myVar= Tūrisms iekšā Ēģipte ir viena valsts 's vadošās ekonomiskās nozares.
izmest ārā $ myVar
Rezultāts ir šāds:
Tūrisms Ēģiptē ir viena no valsts vadošajām ekonomikas nozarēm.
Piezīme: apostrofā tika izmantota arī kosmosa aizbēgšanas secība.
Virkne pēc atsevišķiem pēdiņām
Vai programmētājam ir laiks izbēgt no virknes atstarpēm? Nē. Tāpēc virknes norobežošanai labāk ir izmantot divus pēdiņus; piemēram:
myVar='Tūrisms Ēģiptē ir viena no valstīm' ''vadošās ekonomikas nozares.'Viena citāta virkne neļauj paplašināt (aizstāt ar tās efektu) nevienu glābšanas secību. Par laimi, ja divas virknes ir kodētas viena otrai blakus, tās tiks uzskatītas par vienu virkni. Aizbēgšanas secību var ievietot starp tām, kā norādīts iepriekš. Bēgšanas secība tiks paplašināta. Tātad iznākums kļūst šāds:
Tūrisms Ēģiptē ir viena no valsts vadošajām ekonomikas nozarēm.
Virkne pēc divkāršiem pēdiņām
Izmantojot pēdiņas, aizbēgšanas secības netiek paplašinātas, bet mainīgie tiek paplašināti. To ilustrē šāds kods:
myVar= Tūrisms iekšā Ēģipte ir viena valsts 's vadošās ekonomiskās nozares.izmest ārā $ myVar
Rezultāts ir šāds:
Tūrisms Ēģiptē ir viena no valsts vadošajām ekonomikas nozarēm.
Piezīme: apostrofā tika izmantota arī kosmosa aizbēgšanas secība.
Šajā rakstā galvenais virknes veids ir virkne atsevišķās pēdiņās.
Regulārās izteiksmes pamati
Regulārā izteiksme
Apsveriet šo virkni:
Šī pasaule nav īsti mūsu mājas.
Ļaujiet pasaulei būt interešu apakšvirknei. Tad lielo virkni (visu virkni) sauc par mērķa virkni vai vienkārši par mērķi. “Pasaule” pēdiņās tiek saukta par regulāro izteiksmi vai vienkārši - regex. Saturs, pasaule, ir modelis, šajā gadījumā.
Vienkārša saskaņošana
Turpmākajā kodā, ja mērķī tiek atrasts vārds “pasaule”, mēs teiktu, ka vārds ir saskaņots.
lpp='Šī pasaule nav īsti mūsu mājas.'reģ='pasaule'
ja [[ $ str= ~$ reģ ]];tad
izmest ārāatrasts
citādi
izmest ārānav atrasts
būt
= ~, kas ir piešķiršanas operators, kam seko ~, sauc par saistošo operatoru. Nosacījums pārbauda, vai raksts atbilst mērķa virknei. Ja mērķī tiek atrasta apakšvirkne, kas atbilst modelim, atbalss paziņojums parāda atrasto. Ja tas netiek atrasts, atbalss paziņojums atbalsojas nav atrasts. Šī koda izvade ir šāda:
atrasts
Tā kā modelis, pasaule, ir atrodams mērķī. Ņemiet vērā, ka norobežojošā atstarpe pēc [[un pirms]] ir saglabāta.
Raksts
Iepriekš minētajā kodā “pasaule” pēdiņās ir regulārā izteiksme, bet pati pasaule ir modelis. Tas ir vienkāršs modelis. Tomēr lielākā daļa modeļu nav tik vienkārši. Modelis ir atrodamas apakšvirknes raksturojums. Un tā, Bash modelis izmanto noteiktas meta rakstzīmes. Meta raksturs ir raksturs par citām rakstzīmēm. Piemēram, Bash Pattern izmanto šādas meta rakstzīmes:
^ $ . * +? () [] {} |
Regulāro izteiksmi var ierakstīt arī dubultās iekavās. Bet tam nav jābūt pēdiņās. Tātad, šajā gadījumā tas ir burtiski modelis.
Rakstzīmju klases
Kvadrātiekavas
Tiek atrasts šāda koda izvade, kas nozīmē, ka ir notikusi atbilstība:
lpp='Kaķis ienāca kamerā.'ja [[ $ str= ~[cbr]plkst]];tad
izmest ārāatrasts
būt
Modelis [cbr] at atbilst kaķim, kas sākas ar “c” un kas turpinās un beidzas ar. [cbr] pie nozīmē, sakrīt ar “c” vai “b” vai “r”, kam seko at.
Tiek atrasts šāda koda izvade, kas nozīmē, ka ir notikusi atbilstība:
lpp='Sikspārnis ienāca kamerā.'ja [[ $ str= ~[cbr]plkst]];tad
izmest ārāatrasts
būt
Modelis [cbr] at ir saskaņots ar nūju, kas sākas ar “b” un kas turpinās un beidzas ar at. [cbr] pie nozīmē, sakrīt ar “c” vai “b” vai “r”, kam seko at.
Tiek atrasts šāda koda izvade, kas nozīmē, ka ir notikusi atbilstība:
lpp='Žurka ienāca kamerā.'ja [[ $ str= ~[cbr]plkst]];tad
izmest ārāatrasts
būt
Modelis [cbr] at ir saskaņots ar žurku, kas sākas ar “r” un kas turpinās un beidzas ar at.
Iepriekš minētajos koda paraugos programmētājs nezina, vai mērķa virknē ir kaķis, sikspārnis vai žurka. Bet viņš zina, ka apakšvirkne sākas ar “c”, “b” vai “r”, pēc tam turpinās un beidzas ar. Kvadrātiekavas modelī ļauj dažādām iespējamām rakstzīmēm saskaņot vienu rakstzīmi pozīcijā attiecībā pret citām mērķa vietām. Tātad kvadrātiekavās ir rakstzīmju kopa, no kurām viena atbilst apakšvirknei. Visbeidzot, tiek saskaņota pilnā apakšvirkne.
Rakstzīmju klāsts
Iepriekš kodā [cbr] ir klase. Pat ja “c” vai “b” vai “r” atbilst vienai rakstzīmei, ja pēc tam uzreiz neatbilst, modelis neatbilst nevienam.
Ir daži diapazoni, kas veidos klasi. Piemēram, klasi veido no 0 līdz 9 cipariem, [0–9], ieskaitot 0 un 9. Mazie burti “a” līdz “z” veido klasi [a – z], ieskaitot “a” un “z”. Lielie burti “A” līdz “Z” veido klasi [A – Z], ieskaitot “A” un “Z”. No klases tā ir viena no rakstzīmēm, kas atbilst vienai virknes rakstzīmei.
Šis kods rada atbilstību:
ja [[ 'ID8id'= ~[0-9] ]];tadizmest ārāatrasts
būt
Šoreiz mērķis ir nosacītā burtiskā virkne. 8, kas ir viens no iespējamiem skaitļiem diapazonā, [0-9], atbilst 8 rindā “ID8id”. Iepriekš minētais kods ir līdzvērtīgs:
ja [[ 'ID8id'= ~[0123456789] ]];tadizmest ārāatrasts
būt
Šeit visi iespējamie skaitļi ir uzrakstīti šablonā, tāpēc nav defisi.
Ar šādu kodu tiek iegūta atbilstība:
ja [[ 'ID8iD'= ~[a – z] ]];tadizmest ārāatrasts
būt
Atbilstība ir starp diapazona mazajiem “i” [a – z] un mērķa virknes “ID8iD” mazajiem “i”.
Atcerieties: diapazons ir klase. Klase var būt daļa no lielāka modeļa. Tātad rakstā teksts var būt klases priekšā un/vai pēc tās. To ilustrē šāds kods:
ja [[ “ID8id ir identifikators”= ~ ID[0-9]id ]];tadizmest ārāatrasts
būt
Rezultāts ir: atrasts. “ID8id” no modeļa atbilst mērķa virknē “ID8id”.
Noliegums
Atbilstība netiek iegūta no šāda koda:
ja [[ '0123456789101112'= ~[^0-9] ]];tadizmest ārāatrasts
citādi
izmest ārānav atrasts
būt
Rezultāts ir šāds:
nav atrasts
Ja diapazona priekšā nebūtu kvadrātiekavās, diapazona nulle atbilstu mērķa virknes pirmajai nullei. Tātad, ^ diapazona (vai izvēles rakstzīmju) priekšā noliedz klasi.
Šis kods rada atbilstību, jo nosacījums ir šāds: atbilst jebkurai bezciparu rakstzīmei jebkurā mērķa vietā:
ja [[ 'ABCDEFGHIJ'= ~[^0-9] ]];tadizmest ārāatrasts
citādi
izmest ārānav atrasts
būt
Tātad rezultāts ir: atrasts.
[^0-9] nozīmē bezciparu skaitli, tāpēc [^0-9] ir [0-9] noliegums.
[^a-z] nozīmē burtu, kas nav mazais, tāpēc [^a-z] ir [a-z] noliegums.
[^A-Z] nozīmē burtu, kas nav lielais, tāpēc [^A-Z] ir [A-Z] noliegums.
Ir pieejamas arī citas negācijas.
Periods (.) Modelī
Periods (.) Modelī atbilst jebkurai rakstzīmei, ieskaitot sevi. Apsveriet šādu kodu:
ja [[ “6759WXY.A3”= ~ 7.9W.Y.A]];tadizmest ārāatrasts
būt
Koda izvade ir atrasta, jo pārējās rakstzīmes atbilst. Viens punkts sakrīt ar “5”; vēl viens punkts atbilst “X”; un pēdējais punkts sakrīt ar punktu.
Atbilstoša alternatīva
Apsveriet šo teikumu mērķa virknei:
Būrī ir dažāda veida putni.
Kāds varētu vēlēties uzzināt, vai šim mērķim ir balodis, pāvi vai ērglis. Var izmantot šādu kodu:
lpp='Būrī ir dažāda veida pāvi.'ja [[ $ str= ~ balodis|pāvs|ērglis]];tad
izmest ārāatrasts
citādi
izmest ārānav atrasts
būt
Rezultāts ir, atrasts. Maiņas meta raksturs, | ir nodarbināts. Var būt divas, trīs, četras un vairāk alternatīvas. Šajā kodā ir saskaņots “pāvs”.
Grupēšana
Šādā veidā rakstzīmes grupēšanai ir izmantotas iekavas:
skatuve (dejotāja)
Grupa šeit ir skatuves dejotāja, kuru ieskauj meta rakstzīmes (un). (dejotājs) ir apakšgrupa, savukārt skatuve (dejotāja) ir visa grupa. Apsveriet sekojošo:
(Dejotājs ir lielisks)
Šeit apakšgrupa vai apakšvirkne ir, dejotājs ir satriecošs.
Apakšvirknes ar kopējām daļām
Ieinteresētā persona ir persona, kurai ir interese par uzņēmējdarbību. Iedomājieties biznesu, kuram ir vietne stal.com. Iedomājieties, ka datorā ir viena no šīm mērķa virknēm:
Tīmekļa vietne, pea.com ir paredzēta biznesam .;
Ir ieinteresētā persona.;
Ieinteresētā persona strādā vietnē portal.com .;
Ļaujiet jebkurai no šīm virknēm būt mērķim. Programmētājs, iespējams, vēlēsies uzzināt, vai stal.com vai ieinteresētā persona ir kādā mērķa virknē. Viņa modelis būtu šāds:
ieinteres.com | ieinteresētā persona
izmantojot pārmaiņus.
likme divos vārdos ir ierakstīta divreiz. To var izvairīties, ierakstot modeli šādi:
miets (.com | turētājs)
.com | turētājs šajā gadījumā ir apakšgrupa.
Piezīme: šajā gadījumā izmantojiet maiņas rakstzīmi. joprojām tiks meklēta vietne. Tiek atrasts šāda koda izvads:
lpp='Tīmekļa vietne stal.com ir paredzēta biznesam.'ja [[ $ str= ~ miets(.ar|turētājs) ]];tad
izmest ārāatrasts
būt
Šeit saskaņotā apakšvirkne ir stal.com.
Iepriekš definētais masīvs BASH_REMATCH
BASH_REMATCH ir iepriekš definēts masīvs. Pieņemsim, ka modelim ir grupas. Visa grupa sakrita, nonāk šī masīva indeksa 0 šūnā. Pirmā apakšgrupa sakrīt, iet uz indeksa 1 šūnu; otrā apakšgrupa sakrita, iet uz 2. indeksa šūnu un tā tālāk. Šis kods parāda, kā izmantot šo masīvu:
lpp='Ir atnākusi skatuves dejotāja.'ja [[ $ str= ~ posms (dejotājs) ]];tad
izmest ārāatrasts
būt
priekšiiekšā $ {! BASH_REMATCH [@]};darīt
printf '$ {BASH_REMATCH [i]}, '
darīts
izmest ārā
Rezultāts ir šāds:
atrasts
skatuves dejotāja, dejotāja,
Visa grupa ir skatuves dejotāja. Ir tikai viena apakšgrupa, kas ir dejotāja.
Piezīme: atstarpe rakstā ir atbrīvota.
Lielo/mazo burtu neatkarības atbilstība
Atbilstība, kā paskaidrots iepriekš, ir reģistrjutīga. Saskaņošanu var veikt neatkarīgi no lietas. Tas ir parādīts šādā kodā:
veikali -snocasematchlpp='Mums patīk laba mūzika.'
ja [[ $ str= ~ GoOd]];tad
izmest ārāatrasts
būt
veikali -unocasematch
Rezultāts ir: atrasts. Modelis ir, GoOd. Atbilstošā apakšvirkne ir “laba”. Ievērojiet, kā opcija nocasematch ir iespējota koda segmenta sākumā un atspējota koda segmenta beigās.
Stīgas garums
Virknes garuma iegūšanas sintakse ir šāda:
$ {#PARAMETER}Piemērs:
lpp='Mums patīk laba mūzika.'izmest ārā $ {# str}
Rezultāts ir: 19.
Stīgu samazināšana
Virkņu samazināšanas sintakse ir šāda:
$ {PARAMETER: OFFSET}$ {PARAMETER: OFFSET: LENGTH}
kur nobīde sākas no nulles.
Šis piemērs parāda, kā noņemt virknes pirmās 11 rakstzīmes:
lpp='Es vienmēr dejoju labas mūzikas pavadījumā.'izmest ārā $ {str: 10}
Rezultāts ir šāds:
laba mūzika.
Tiek skaitīts LENGTH, sākot ar nākamo rakstzīmi. Šis kods parāda, kā virknes daļu var atļaut:
lpp='Es vienmēr dejoju labas mūzikas pavadījumā.'izmest ārā $ {str: 10: 6}
Rezultāts ir šāds:
ance t
Pirmās 11 rakstzīmes tika noņemtas; tika atļautas nākamās 6 rakstzīmes, bet pārējās rakstzīmes tika automātiski noņemtas.
Meklēt un aizstāt
Kad tiek atrasta apakšvirkne, to var aizstāt ar citu apakšvirkni. Tam sintakses ir šādas:
kur=$ {PARAMETER/PATTERN/REPLACEMENT}kur=$ {PARAMETER // PATTERN/REPLACEMENT}
kur=$ {PARAMETER/PATTERN}
kur=$ {PARAMETER // PATTERN}
Pirmajai sintaksei ar vienu slīpsvītru uz priekšu tiek aizstāta tikai pirmā atbilstība. Piemērs:
lpp='Kamerā ir žurka, sikspārnis un kaķis.'taisnība=$ {str/[cbr] pie/liela govs}
izmest ārā $ str
izmest ārā $ ret
Rezultāts ir šāds:
Kamerā ir žurka, sikspārnis un kaķis.
Kamerā ir liela govs, sikspārnis un kaķis.
Otrajai sintaksei ar dubultām slīpsvītrām uz priekšu visi spēles gadījumi tiek aizstāti. Piemērs:
lpp='Kamerā ir žurka, sikspārnis un kaķis.'taisnība=$ {str // [cbr] at/liela govs}
izmest ārā $ str
izmest ārā $ ret
Rezultāts ir šāds:
Kamerā ir žurka, sikspārnis un kaķis.
Kamerā ir liela govs, liela govs un liela govs.
Trešajai sintaksei ar vienu slīpsvītru uz priekšu netiek aizstāta pirmā un vienīgā spēle.
Tiek dzēsta arī pirmā atrastā apakšvirkne. Piemērs:
lpp='Kamerā ir žurka, sikspārnis un kaķis.'taisnība=$ {str/[cbr] plkst.}
izmest ārā $ str
izmest ārā $ ret
Ceturtajai sintaksei ar dubultām slīpsvītrām uz priekšu, visas spēles nevar aizstāt. Turklāt visas atrastās apakšvirknes tiek dzēstas. Piemērs:
lpp='Kamerā ir žurka, sikspārnis un kaķis.'taisnība=$ {str // [cbr] plkst.}
izmest ārā $ str
izmest ārā $ ret
Rezultāts ir šāds:
Kamerā ir žurka, sikspārnis un kaķis.
Kamerā ir a, a un a.
Secinājums
Lai pārbaudītu, vai virknei Bash ir apakšvirkne, ir jāizmanto Pattern Matching. Pattern Matching notiek ne tikai dubultās iekavās, [[. . . ]]. Tas var notikt arī parametru paplašināšanā, izmantojot $ {. . .}. Izmantojot parametru paplašināšanu, ir iespējams iegūt apakšvirkni pēc indeksiem.
Šajā rakstā izklāstītie ir vissvarīgākie modeļu saskaņošanas punkti. Ir vairāk! Tomēr lasītājam vajadzētu izpētīt nākamo, ir faila nosaukuma paplašināšana.