Neatkarīgi no tā, vai meklējāt ar Grep vai meklējat programmas, kas var jums daļēji pārdēvēt failus, jūs droši vien domāja, vai ir vieglāk paveikt darbu. Par laimi tas ir, un to sauc par "regulārām izteiksmēm".
(Komikss no XKCD.com)
Regulāras izteiksmes ir formulējumi, kas formatēti ļoti konkrētā veidā un kas var izturēties pret daudziem atšķirīgiem rezultātiem. Pazīstams arī kā "regex" vai "regexp", tos galvenokārt izmanto meklēšanas un failu nosaukšanas funkcijās. Vienu regex var izmantot kā formulu, lai izveidotu vairākus dažādus iespējamos rezultātus, no kuriem visi tiek meklēti. Alternatīvi varat norādīt, kā nosaukumu grupu nosaukt, norādot regex, un jūsu programmatūra var pakāpeniski pāriet uz nākamo plānoto izvadi. Tādā veidā jūs varat viegli un efektīvi pārdēvēt vairākus failus vairākās mapēs, un jūs varat pārspēt vienkāršas numerācijas sistēmas ierobežojumus.
Tā kā regulāro izteiksmju izmantošana balstās uz īpašu sintaksi, programmā jābūt spējīgai tos lasīt un analizēt. Daudzām partijas failu pārdēvēšanas programmām operētājsistēmai Windows un OS X ir atbalsts regexps, kā arī starpplatformu meklēšanas rīks GREP (ko mēs pieskārājām mūsu Bash Scripting iesācējiem) un Awk komandrindas rīks * Nix. Turklāt, daudzi alternatīvie failu pārvaldnieki, palaišanas un meklēšanas rīki tos izmanto, un tiem ir ļoti svarīga vieta tādās programmēšanas valodās kā Perl un Ruby. Citas izstrādes vides, piemēram, .NET, Java un Python, kā arī gaidāmais C + + 11, visi nodrošina standarta bibliotēkas regulāro izteiksmju izmantošanai. Kā jūs varat iedomāties, tie var būt ļoti noderīgi, mēģinot samazināt programmā ievadītā koda apjomu.
Pirms mēs parādīsim piemērus, mēs vēlētos kaut ko norādīt. Mēs izmantosim bash apvalku un komandu grep, lai parādītu jums, kā lietot regulārās izteiksmes. Problēma ir tāda, ka reizēm mēs vēlamies izmantot īpašas rakstzīmes, kas jānodod grep, un bash apvalks interpretēs šo rakstzīmi, jo to arī izmanto čaula. Šajos apstākļos mums ir "jābēdz" šīs rakstzīmes. Tas var radīt neskaidrības, jo šie rakstzīmju "izbēgšana" notiek arī regexps iekšienē. Piemēram, ja mēs vēlamies iekļaut to grep:
\<
mums tas būs jāaizstāj ar:
\\\<
Katram īpašajam raksturīgam simbolam šeit ir viena slīpsvītra. Varat arī izmantot vienotas cenas:
'\<'
Vienu pēdiņas pastāstiet bash NAV, lai interpretētu to, kas no tiem ir. Lai gan mēs prasām, lai šie pasākumi tiktu veikti, lai mēs varētu jums pierādīt, jūsu programmām (jo īpaši ar GUI balstītajām) bieži vien nav nepieciešami šie papildu pasākumi. Lai lietas būtu vienkāršas un vienkāršas, faktiskā regulārā izteiksme tiks dota kā citēts teksts, un komandrindas ekrānuzņēmumos būs redzams izbēgtais sintaksis.
Regexps ir tiešām īss veids, kā noteikt noteikumus, lai jūsu dators varētu tos paplašināt vairākos variantos. Apskatīsim šādu piemēru:
Tom [0123456789]
Kvadrātiekavas - [un] - paziņojiet analizatoram, ka viss, kas atrodas iekšā, var izmantot jebkuru ONE rakstzīmi, lai tie atbilstu. Neatkarīgi no tā, kas atrodas šajās iekavās, sauc par rakstzīmju kopu.
Tātad, ja mums būtu milzīgs ierakstu saraksts, un mēs izmantojām šo regex, lai meklētu, tiktu saskaņoti šādi termini:
un tā tālāk. Tomēr šis saraksts nebūtu saskaņots, tāpēc tas netiktu parādīts jūsu rezultātos:
Varat arī izvēlēties meklēt ar periodu (.), Kas ļaus ierakstīt jebkuru rakstzīmi, kamēr pastāv raksturs.
Kā jūs varat redzēt, grepping ar
.tom
nesagādāja vārdus, kuriem sākumā bija tikai "tom". Tika iekļauti arī "zaļie tomāti", jo pirms "tom" vietas tiek uzskatīts par rakstzīmi, bet tādiem jēdzieniem kā "tomF" sākotnēji nebija rakstzīmes, un tāpēc tie tika ignorēti.
Piezīme. Grep noklusējuma darbība ir atgriezt visu teksta rindu, ja daļa no tām atbilst jūsu regex. Citas programmas to var nedarīt, un jūs varat to izslēgt grep ar "-o" karogu.
Varat arī norādīt pārmaiņas, izmantojot cauruli (|), piemēram, šeit:
speciali (s | z) e
Tas atradīs abus:
Izmantojot grep komandu, mums ir jāizvairās no speciālajām rakstzīmēm (, |, un) ar gruntsrāmām, kā arī jāizmanto "-E" karodziņš, lai to panāktu, lai izvairītos no nevajadzīgām kļūdām.
Kā minēts iepriekš, tas ir tāpēc, ka mums ir jāpasaka, ka bash apvalks izlaida šīs rakstzīmes, lai tās greptu un neko nedarītu ar tām. Paraugs "-E" norāda grep, lai iekavas un caurules izmantotu kā īpašas rakstzīmes.
Jūs varat meklēt pēc izslēgšanas, izmantojot karti, kas atrodas gan kvadrātiekavās, gan komplekta sākumā:
tom [^ F | 0-9]
Atkal, ja jūs izmantojat grep un bash, atcerieties izbēgt no šīs caurules!
Noteikumi, kas bija sarakstā, bet neuzrādīja:
Tie neatbilst mūsu regex.
Bieži vien mēs meklējam, pamatojoties uz robežām. Dažreiz mēs tikai gribam virknes, kas parādās vārda sākumā, vārda beigās vai koda rindiņas beigās. Tas ir viegli izdarāms, izmantojot to, ko mēs saucam par enkuriem.
Izmantojot rullīti (ārpus iekavām), jūs varat norādīt līnijas "sākumu".
^ tom
Lai meklētu līnijas beigas, izmantojiet dolāra zīmi.
tom $
Jūs varat redzēt, ka mūsu meklēšanas virkne šajā gadījumā ir PIRMS enkurs.
Varat arī par spēlēm, kas parādās vārdu sākumā vai beigās, nevis veselas rindiņas.
\<>
tom \>
Kā mēs minējām piezīmē šī raksta sākumā, mums ir jāizvairās no šīm īpašajām rakstzīmēm, jo mēs izmantojam bash. Varat arī izmantot vienotas cenas:
Rezultāti ir vienādi. Pārliecinieties, ka izmantojat atsevišķas cenas, nevis dubultās pēdiņas.
Mēs esam tikai sasniedzis aisberga virsotni šeit. Varat arī meklēt naudas termiņus, kas apzīmēti ar valūtas marķieri, un meklēt jebkuru no trim vai vairākiem atbilstošiem nosacījumiem. Lieta var būt ļoti sarežģīta. Ja vēlaties uzzināt vairāk par regulārajām izteiksmēm, lūdzu, apskatiet šādus avotus.
Jūs varat arī veidot un pārbaudīt savas regulārās izteiksmes, izmantojot bezmaksas Flash balstītu tiešsaistes rīku, ko sauc RegExr. Tas darbojas, rakstot jūs, ir bezmaksas, un to var izmantot vairumā pārlūkprogrammu.
Vai jums ir iecienīts regulāro izteiksmju izmantojums? Vai zināt lielisku partijas pārdēvētājs, kas tos izmanto? Varbūt jūs vienkārši vēlaties lepoties ar savu grep-fu. Piedāvājiet savas domas, komentējot!