Keel põgenedes
Stringi saab konstrueerida, asendades iga tühiku tühiku tühjendusjärjestusega, ''; nagu:
myVar= Turism sisse Egiptus on üks riigist 's juhtivad majanduslikud tööstusharud.
viskas välja $ myVar
Väljund on:
Turism Egiptuses on üks riigi juhtivaid majandussektoreid.
Märkus: apostroof kasutas ka tühjendusjärjestust.
String üksikute jutumärkide järgi
Kas programmeerijal on aega põgeneda stringi kõikidest tühikutest? Ei. Seetõttu on parem kasutada stringi piiritlemiseks kahte ühe jutumärki; nagu näiteks:
myVar='Egiptuse turism on üks riikidest' ''juhtiv majandustööstus.'Ühe tsitaadiga string ei võimalda ühegi põgenemisjärjestuse laiendamist (selle mõjuga asendamist). Õnneks, kui kaks stringi on üksteise kõrval kodeeritud, võetakse neid ühe stringina. Põgenemisjärjestuse saab vahele lisada, nagu ülalpool tehtud. Põgenemisjärjestust laiendatakse. Nii et väljund muutub:
Turism Egiptuses on üks riigi juhtivaid majandussektoreid.
String topeltjutumärkide järgi
Topeltjutumärkidega ei laiendata ka põgenemisjärjestusi, vaid laiendatakse muutujaid. Seda illustreerib järgmine kood:
myVar= Turism sisse Egiptus on üks riigist 's juhtivad majanduslikud tööstusharud.viskas välja $ myVar
Väljund on:
Turism Egiptuses on üks riigi juhtivaid majandussektoreid.
Märkus: apostroof kasutas ka tühjendusjärjestust.
Selles artiklis on peamiseks vaadeldava stringi tüübiks üksikute jutumärkidega string.
Regulaaravaldise alused
Regulaarne
Mõelge sellele stringile:
See maailm pole tegelikult meie kodu.
Olgu maailm huvide alamstring. Seejärel nimetatakse suurt stringi (tervet stringi) sihtmärgiks või lihtsalt sihtmärgiks. Jutumärkides olevat „maailma” nimetatakse regulaaravaldiseks või lihtsalt regexiks. Sisu, maailm, on antud juhul muster.
Lihtne sobitamine
Kui järgmises koodis leitakse sihtmärgist sõna „maailm”, siis ütleme, et sõna on sobitatud.
lk='See maailm pole tegelikult meie kodu.'reg='maailm'
kui [[ $ str= ~$ reg ]];siis
viskas väljaleitud
muidu
viskas väljaei leitud
olla
= ~, mis on määramisoperaator, millele järgneb ~, nimetatakse siduvaks operaatoriks. Tingimus kontrollib, kas muster on sihtstringis sobitatud. Kui sihtmärgist leitakse mustrile vastav alamstring, kuvatakse kaja lause leitud. Kui seda ei leita, kaja avaldus kaja ei leitud. Selle koodi väljund on järgmine:
leitud
Kuna muster, maailm, leitakse sihtmärgist. Pange tähele, et piiritletud tühik pärast [[ja enne]] on säilinud.
Muster
Ülaltoodud koodis on „maailm” jutumärkides regex, maailm ise on muster. See on lihtne muster. Enamik mustreid pole siiski nii lihtne. Muster on leitud alamstringi iseloomustus. Ja nii kasutab Bashi muster teatud metamärke. Meta -tegelane on tegelane teiste tegelaste kohta. Näiteks kasutab Bash Pattern järgmisi metamärke:
^ $ . * +? () [] {} |
Regulaaravaldise saab sisestada ka kahekordsesse sulgusse. Kuid see ei pea olema jutumärkides. Niisiis, sel juhul on see sõna otseses mõttes muster.
Märkide klassid
Nurksulud
Leiti järgmise koodi väljund, mis tähendab, et toimus vaste:
lk='Kass tuli kambrisse.'kui [[ $ str= ~[cbr]kl]];siis
viskas väljaleitud
olla
Muster [cbr] at on sobitunud kassiga, mis algab tähega „c” ja mis jätkub ja lõpeb at. [cbr] at tähendab sobitada 'c' või 'b' või 'r', millele järgneb at.
Leiti järgmise koodi väljund, mis tähendab, et toimus vaste:
lk='Nahkhiir tuli kambrisse.'kui [[ $ str= ~[cbr]kl]];siis
viskas väljaleitud
olla
Muster [cbr] at on sobitanud kurika, mis algab tähega „b” ja mis jätkub ja lõpeb at. [cbr] at tähendab sobitada 'c' või 'b' või 'r', millele järgneb at.
Leiti järgmise koodi väljund, mis tähendab, et toimus vaste:
lk='Rott tuli kambrisse.'kui [[ $ str= ~[cbr]kl]];siis
viskas väljaleitud
olla
Muster [cbr] at on sobitunud rotiga, mis algab tähega „r” ja mis jätkub ja lõpeb at.
Ülaltoodud koodinäidistes ei tea programmeerija, kas sihtstringis on kass, nahkhiir või rott. Kuid ta teab, et alamstring algab kas “c” või “b” või “r”, seejärel jätkub ja lõpeb tähega. Mustri nurksulud võimaldavad erinevatel võimalikel tähemärkidel sobitada ühte märki sihtmärgi teistega võrreldes. Niisiis, nurksulud sisaldavad märkide komplekti, millest üks sobib alamstringi jaoks. Lõpuks sobitatakse kogu alamstring.
Tegelaste valik
Ülaltoodud koodis [cbr] on klass. Isegi kui „c”, „b” või „r” vastab ühele tähemärgile, ei vasta muster kohe, kui see kohe ei vasta.
Noh, on teatud vahemikud, mis moodustavad klassi. Näiteks klassi moodustavad 0–9 numbrit, [0–9], sealhulgas 0 ja 9. Väiketähed „a” kuni „z” moodustavad klassi [a – z], sealhulgas a ja z. Suured tähed 'A' kuni 'Z' moodustavad klassi [A-Z], sealhulgas 'A' ja 'Z'. Klassist on see üks märke, mis sobiks stringi ühe tähemärgiga.
Järgmine kood annab vaste:
kui [[ 'ID8id'= ~[0-9] ]];siisviskas väljaleitud
olla
Seekord on sihtmärk tingimusel olev sõnasõnaline string. 8, mis on üks võimalikest arvudest vahemikus [0–9], on stringis „ID8id” sobinud 8-ga. Ülaltoodud kood on samaväärne:
kui [[ 'ID8id'= ~[0123456789] ]];siisviskas väljaleitud
olla
Siin on kõik võimalikud numbrid mustrisse kirjutatud, seega pole sidekriipsu.
Järgmises koodis saadakse vaste:
kui [[ 'ID8iD'= ~[a-z] ]];siisviskas väljaleitud
olla
Sobivus on vahemiku väiketähtede „i”, [a – z] ja sihtstringi „ID8iD” väiketähtede „i” vahel.
Pidage meeles: vahemik on klass. Klass võib olla osa suuremast mustrist. Nii et mustris võib tekst olla tunni ees ja/või pärast seda. Seda illustreerib järgmine kood:
kui [[ „ID8id on identifikaator”= ~ ID[0-9]id ]];siisviskas väljaleitud
olla
Väljund on: leitud. Mustri „ID8id” on sihtstringis sobinud „ID8id”.
Eitus
Sobivust ei saada järgmise koodi abil:
kui [[ '0123456789101112'= ~[^0-9] ]];siisviskas väljaleitud
muidu
viskas väljaei leitud
olla
Väljund on:
ei leitud
Kui vahemiku ees ei oleks ^, siis nurksulgudes oleks vahemiku null sobinud sihtstringi esimese nulliga. Niisiis, ^ vahemiku (või valikuliste märkide) ees eitab klassi.
Järgmine kood loob vaste, kuna tingimus on järgmine: sobitage sihtmärgi kõik kohad, kus pole numbrit:
kui [[ 'ABCDEFGHIJ'= ~[^0-9] ]];siisviskas väljaleitud
muidu
viskas väljaei leitud
olla
Nii et väljund on: leitud.
[^0-9] tähendab mittekohalist numbrit, seega [^0-9] on eitus [0-9].
[^a-z] tähendab väiketähte, seega [^a-z] on [a-z] eitus.
[^A-Z] tähendab mitte suurtähte, seega [^A-Z] on [A-Z] eitus.
Teised eitused on saadaval.
Periood (.) Mustris
Mustris olev periood (.) Sobib mis tahes tähemärgiga, sealhulgas temaga. Mõelge järgmisele koodile:
kui [[ „6759WXY.A3”= ~ 7.9W.Y.A]];siisviskas väljaleitud
olla
Koodi väljund leitakse, kuna teised märgid sobivad. Üks punkt vastab ‘5’; teine punkt vastab „X” -le; ja viimane punkt vastab punktile.
Sobiv vaheldus
Mõelge sellele lausele sihtstringi puhul:
Puuris on erinevat tüüpi linde.
Keegi võib soovida teada, kas sellel sihtmärgil on tuvi, paabulind või kotkas. Kasutada saab järgmist koodi:
lk='Puuris on eri tüüpi paabulinde.'kui [[ $ str= ~ tuvi|paabulind|kotkas]];siis
viskas väljaleitud
muidu
viskas väljaei leitud
olla
Väljund on leitud. Vaheldumise metamärk, | on tööle võetud. Alternatiive võib olla kaks, kolm, neli ja rohkem. Selles koodis on sobitatud paabulind.
Rühmitamine
Järgmises mustris on tähemärkide rühmitamiseks kasutatud sulgusid:
lava (tantsija)
Siinne rühm on lavatantsija, keda ümbritsevad metategelased (ja). (tantsija) on alagrupp, samas kui lava (tantsija) on kogu rühm. Kaaluge järgmist.
(Tantsija on suurepärane)
Siin on alamrühm või alamstring, tantsija on vinge.
Alamstringid ühisosadega
Sidusrühm on isik, kellel on huvi äri vastu. Kujutage ette ettevõtet, mille veebisait on stal.com. Kujutage ette, et arvutis on üks järgmistest sihtmärkidest:
Veebisait, kaal.com, on mõeldud äri jaoks .;
On huvirühm .;
Sidusrühm töötab saidil.com;
Olgu mõni neist stringidest sihtmärk. Programmeerija võib soovida teada, kas kaal.com või sidusrühm on mis tahes sihtstringis. Tema muster oleks järgmine:
kaal.com | sidusrühm
vaheldust kasutades.
kaal on kahe sõnaga kaks korda trükitud. Seda saab vältida, sisestades mustri järgmiselt.
panus (.com | omanik)
.com | omanik on sel juhul alamrühm.
Märkus: vaheldumismärgi kasutamine sel juhul. ikka otsitakse otsingut saidilt kaal.com või sidusrühmast. Leitakse järgmise koodi väljund:
lk='Veebisait, kaal.com on ettevõtte jaoks.'kui [[ $ str= ~ panus(.koos|hoidja) ]];siis
viskas väljaleitud
olla
Siin sobitatud alamstring on kaal.com.
BASH_REMATCH ettemääratud massiiv
BASH_REMATCH on eelmääratletud massiiv. Oletame, et mustril on rühmad. Kogu rühm sobis, läheb selle massiivi indeksi 0 lahtrisse. Esimene alamrühm sobis, läheb indeksi 1 lahtrisse; teine alamrühm sobis, läheb indeksi 2 lahtrisse jne. Järgmine kood näitab, kuidas seda massiivi kasutada:
lk='Lavatantsija on tulnud.'kui [[ $ str= ~ etapp (tantsija) ]];siis
viskas väljaleitud
olla
eestisisse $ {! BASH_REMATCH [@]};teha
printf '$ {BASH_REMATCH [i]}, '
tehtud
viskas välja
Väljund on:
leitud
lavatantsija, tantsija,
Kogu rühm on lavatantsija. On ainult üks alarühm, mis on tantsija.
Märkus: mustri tühik on tühi.
Suur- ja väiketähtede sõltumatuse sobitamine
Vastendamine, nagu eespool selgitatud, on tõstutundlik. Sobitamist saab teha juhtumist sõltumatult. Seda illustreerib järgmine kood:
kauplused -snocasematchlk='Meile meeldib hea muusika.'
kui [[ $ str= ~ GoOd]];siis
viskas väljaleitud
olla
kauplused -unocasematch
Väljund on: leitud. Muster on GoOd. Sobiv alamstring on „hea”. Pange tähele, kuidas valik nocasematch on koodisegmendi alguses lubatud ja koodisegmendi lõpus keelatud.
Stringi pikkus
Stringi pikkuse saamiseks on süntaks järgmine:
$ {#PARAMETER}Näide:
lk='Meile meeldib hea muusika.'viskas välja $ {# str}
Väljund on: 19.
Stringide vähendamine
Stringide vähendamise süntaksid on järgmised:
$ {PARAMETER: OFFSET}$ {PARAMETER: OFFSET: LENGTH}
kus nihke lugemine algab nullist.
Järgmine näide näitab, kuidas stringi esimesed 11 märki eemaldada:
lk='Ma tantsin alati hea muusika saatel.'viskas välja $ {str: 10}
Väljund on:
head muusikat.
PIKKUSE lugemine algab järgmisest tähemärgist. Järgmine kood näitab, kuidas stringi osa saab lubada:
lk='Ma tantsin alati hea muusika saatel.'viskas välja $ {str: 10: 6}
Väljund on:
ance t
Esimesed 11 märki eemaldati; järgmised 6 tähemärki olid lubatud ja ülejäänud tähemärgid eemaldati automaatselt.
Otsige ja asendage
Kui alamstring on leitud, saab selle asendada teise alamstringiga. Selle süntaksid on järgmised:
kus=$ {PARAMETER/PATTERN/REPLACEMENT}kus=$ {PARAMETER // PATTERN/REPLACEMENT}
kus=$ {PARAMETER/PATTERN}
kus=$ {PARAMETER // PATTERN}
Esimese süntaksi puhul, millel on üks kaldkriips, asendatakse ainult esimene vaste. Näide:
lk='Kambris on rott, nahkhiir ja kass.'õige=$ {str/[cbr] at/suur lehm}
viskas välja $ str
viskas välja $ ret
Väljund on:
Kambris on rott, nahkhiir ja kass.
Kambris on suur lehm, nahkhiir ja kass.
Teise süntaksi puhul kahekordse kaldkriipsuga asendatakse kõik mängu esinemised. Näide:
lk='Kambris on rott, nahkhiir ja kass.'õige=$ {str // [cbr] at/suur lehm}
viskas välja $ str
viskas välja $ ret
Väljund on:
Kambris on rott, nahkhiir ja kass.
Kambris on suur lehm, suur lehm ja suur lehm.
Kolmanda süntaksi puhul, millel on üks kaldkriips, ei asendata esimest ja ainsat vastet.
Samuti kustutatakse esimene leitud alamstring. Näide:
lk='Kambris on rott, nahkhiir ja kass.'õige=$ {str/[cbr] kell}
viskas välja $ str
viskas välja $ ret
Neljanda süntaksi puhul kahekordse ettepoole suunatud kaldkriipsuga ei asendata kõiki vasteid. Samuti kustutatakse kõik leitud alamstringid. Näide:
lk='Kambris on rott, nahkhiir ja kass.'õige=$ {str // [cbr] kell}
viskas välja $ str
viskas välja $ ret
Väljund on:
Kambris on rott, nahkhiir ja kass.
Kambris on a, a ja a.
Järeldus
Selleks, et kontrollida, kas stringil on Bashis alamstring, tuleb kasutada mustrite sobitamist. Mustrite sobitamine ei toimu ainult kahekordses sulgudes, [[. . . ]]. See võib toimuda ka parameetrite laiendamisel, selle $ {. . .}. Parameetrite laiendamisega on võimalik saada alamstringi indeksite järgi.
Selles artiklis on esitatud mustrite sobitamise kõige kriitilisemad punktid. Neid on veel! Kuid mida lugeja peaks järgmisena uurima, on failinime laiendamine.