Kā izmantot pamata regulāras izteiksmes, lai meklētu labāku un ietaupītu laiku
Vai esat meklējis ar Grep vai meklējat programmas, kas var partijas pārdēvēt failus, jūs, iespējams, esat prātojuši, vai ir vieglāk atrast savu darbu. Par laimi, tur ir, un to sauc par “regulārām izteiksmēm”.
(Komikss no XKCD.com)
Kas ir regulāras izteiksmes?
Regulāras izteiksmes ir formulējumi, kas ir formatēti ļoti specifiskā veidā un kas var kalpot par daudziem dažādiem rezultātiem. To sauc arī par “regex” vai “regexp”, tie galvenokārt tiek izmantoti meklēšanas un failu nosaukšanas funkcijās. Vienu regex var izmantot kā formulu, lai izveidotu virkni dažādu iespējamo rezultātu, no kuriem visi tiek meklēti. Varat arī norādīt, kā failu grupa jānorāda, norādot regex, un jūsu programmatūra var pakāpeniski pāriet uz nākamo paredzēto izeju. 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ārsniegt vienkāršas numerācijas sistēmas ierobežojumus.
Tā kā regulāru izteiksmju izmantošana ir atkarīga no īpašas sintakses, jūsu programmai ir jābūt spējīgai tos nolasīt un analizēt. Daudzām Windows un OS X sērijas failu pārdēvēšanas programmām ir atbalsts regexps, kā arī starpplatformu meklēšanas rīks GREP (kuru mēs aplūkojām mūsu Bash Scripting for Beginners Guide) un Awk komandrindas rīks * Nix. Turklāt daudzi alternatīvi failu pārvaldnieki, palaišanas un meklēšanas rīki tos izmanto, un tiem ir ļoti svarīga vieta programmēšanas valodās, piemēram, Perlā un Ruby. Citas attīstības vides, piemēram, .NET, Java un Python, kā arī gaidāmās C ++ 11, nodrošina standarta bibliotēkas, kas izmanto regulāras izteiksmes. Kā jūs varat iedomāties, viņi var būt patiešām noderīgi, mēģinot samazināt programmā ievietoto kodu.
Piezīme par bēgšanu
Pirms mēs parādīsim jums piemērus, mēs gribētu norādīt kaut ko. Mēs izmantosim bash apvalku un grep komandu, lai parādītu, kā lietot regulāras izteiksmes. Problēma ir tā, ka dažreiz mēs vēlamies izmantot īpašas rakstzīmes, kas ir jānodod grep, un bash apvalks interpretēs šo raksturu, jo apvalks to izmanto arī. Šādos apstākļos mums ir jāatkāpjas no šīm rakstzīmēm. Tas var kļūt mulsinoši, jo šī rakstzīmju “izbēgšana” notiek arī regexps iekšienē. Piemēram, ja mēs vēlamies to ievadīt grep:
\ T<
mums tas būs jāaizstāj ar:
\ T<
Katrs īpašais raksturs šeit iegūst vienu slīpsvītru. Varat arī izmantot atsevišķas cenas:
"\ T<'
Atsevišķas cenas ļauj bash NAV interpretēt to iekšpusi. Lai gan mēs pieprasām, lai šīs darbības tiktu veiktas, lai mēs varētu parādīt jums, jūsu programmās (īpaši GUI balstītās programmās) bieži vien nav nepieciešami šie papildu soļi. Lai saglabātu lietas vienkāršu un vienkāršu, faktiskā regulārā izteiksme jums tiks dota kā citēts teksts, un komandrindas ekrānuzņēmumos redzēsiet izbēgušo sintaksi.
Kā tās paplašinās?
Regexps ir patiešām īss veids, kā norādīt terminu, lai dators varētu tos paplašināt vairākās opcijās. Apskatīsim šādu piemēru:
tom [0123456789]
Kvadrātiekavas - [un] - stāsta parsēšanas dzinējam, ka jebkurš iekšējais, jebkurš ONE raksturs var tikt izmantots, lai saskaņotu. 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, šādi termini tiks saskaņoti:
- tom
- tom0
- tom1
- tom2
- tom3
un tā tālāk. Tomēr šāds saraksts netiks saskaņots, un tādējādi NEVĒLTS jūsu rezultātos:
- tomāti; regex neattiecas uz burtiem pēc “tom”
- Toms; regex ir reģistrjutīga!
Varat arī izvēlēties meklēšanu ar periodu (.), Kas ļaus ievadīt jebkuru rakstzīmi, ja ir klāt rakstzīme.
Kā jūs varat redzēt, grepēšana ar
.tom
neizraisīja noteikumus, kuriem sākumā bija tikai „tom”. Tika ieviesti pat „zaļie tomāti”, jo telpa pirms „tom” tiek uzskatīta par raksturu, bet termini, piemēram, “tomF”, sākumā nebija rakstura un tādējādi tika ignorēti.
Piezīme: Grep noklusējuma uzvedība ir atgriezt visu teksta rindu, ja kāda daļa atbilst jūsu regex. Citas programmas to nedarīs, un jūs varat to izslēgt grep ar karodziņu "-o".
Varat arī norādīt maiņu, izmantojot cauruli (|), piemēram, šeit:
speciali (s | z) e
Tas atradīs abus:
- specializējas
- specializējas
Izmantojot grep komandu, mums jāizvairās no speciālajām rakstzīmēm (, |, un) ar backslashes, kā arī jāizmanto karodziņš -E, lai to paveiktu un izvairītos no neglītām kļūdām.
Kā mēs jau iepriekš minējām, tas ir tāpēc, ka mums ir jāpasaka bash apvalks, lai nodotu šīs rakstzīmes grepam un nedarītu neko ar viņiem. Karogs “-E” stāsta grep izmantot iekavās un caurulē kā īpašas rakstzīmes.
Jūs varat meklēt pēc izslēgšanas, izmantojot kārtiņu, kas ir gan jūsu kvadrātiekavās, gan komplekta sākumā:
tom [^ F | 0-9]
Atkal, ja jūs izmantojat grep un bash, atcerieties izvairīties no šīs caurules!
Noteikumi, kas bija sarakstā, bet netika parādīti, ir šādi:
- tom0
- tom5
- tom9
- tomF
Tie neatbilst mūsu regex.
Kā es varu izmantot vidi?
Bieži vien mēs meklējam, pamatojoties uz robežām. Dažreiz mēs vēlamies tikai virknes, kas parādās vārda sākumā, vārda beigās vai koda rindas beigās. To var viegli izdarīt, izmantojot to, ko mēs saucam par enkuriem.
Izmantojot caret (ārpus iekavā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 JŪSU pirms enkura.
Varat izmantot arī vārdus, kas parādās vārdu sākumā vai beigās, nevis veselas rindas.
\ T
tom>
Kā mēs minējām piezīmi šā raksta sākumā, mums ir jāizvairās no šīm īpašajām rakstzīmēm, jo mēs izmantojam bash. Varat arī izmantot atsevišķas cenas:
Rezultāti ir vienādi. Pārliecinieties, ka izmantojat atsevišķas cenas, nevis dubultās cenas.
Citi resursi Advanced Regexps
Šeit mēs piedzīvojām tikai aisberga galu. Varat arī meklēt naudas izteiksmes, ko norobežo valūtas marķieris, un meklēt kādu no trim vai vairākiem atbilstības noteikumiem. Lietas var iegūt ļoti sarežģītas. Ja jūs vēlaties uzzināt vairāk par regulārajiem izteicieniem, lūdzu, apskatiet šādus avotus.
- Zytrax.com ir dažas lappuses ar konkrētiem piemēriem, kāpēc lietas notiek un neatbilst.
- Regulāra-Expressions.info ir arī slepkava ceļvedis daudziem progresīvākiem materiāliem, kā arī ērta atsauces lapa.
- Gnu.org ir lapa, kas veltīta regexps izmantošanai ar grep.
Varat arī izveidot un izmēģināt savus regulāros izteiksmes, izmantojot bezmaksas Flash rīku ar nosaukumu RegExr. Tas darbojas, rakstot, ir bezmaksas, un to var izmantot vairumā pārlūkprogrammu.
Vai jums ir iecienītākais lietojums regulārām izteiksmēm? Zināt par lielu partiju pārdēvētāju, kas tos izmanto? Varbūt jūs vienkārši gribat izbaudīt savu grep-fu. Veiciniet savas domas, komentējot!