29Jun

Sådan bruges grundlæggende regelmæssige udtryk for at søge bedre og spare tid

click fraud protection

Uanset om du har søgt med Grep eller ser på programmer, der kan batch omdøbe filer til dig, har du sikkert spekuleret på, om der var en nemmere måde at få dit job på.Heldigvis er der, og det hedder "regulære udtryk."

( Tegneserie fra XKCD.com)

Hvad er regulære udtryk?

Regelmæssige udtryk er udsagn formateret på en meget specifik måde, og det kan stå for mange forskellige resultater. Også kendt som "regex" eller "regexp", bruges de primært til søgning og fil navngivning funktioner. En regex kan bruges som en formel til at oprette en række forskellige mulige output, som alle søges efter. Alternativt kan du angive, hvordan en gruppe af filer skal navngives ved at angive en regex, og din software kan trinvist flytte til den næste tilsigtede udgang. På denne måde kan du omdøbe flere filer i flere mapper meget nemt og effektivt, og du kan flytte ud over begrænsningerne af et simpelt nummereringssystem.

Fordi brugen af ​​regulære udtryk er baseret på en særlig syntaks, skal dit program være i stand til at læse og analysere dem. Mange batch-filnavneprogrammer til Windows og OS X har støtte til regexps, samt søgemaskineværktøjet GREP( som vi rørte ved i vores Bash Scripting for Beginners Guide) og Awk-kommandolinjeværktøjet til * Nix. Derudover bruger mange alternative filadministratorer, launchers og søgeværktøjer dem, og de har et meget vigtigt sted i programmeringssprog som Perl og Ruby. Andre udviklingsmiljøer som. NET, Java og Python samt de kommende C ++ 11, alle leverer standardbiblioteker til brug af regulære udtryk. Som du kan forestille dig, kan de være meget nyttige, når du forsøger at minimere mængden af ​​kode, du lægger i et program.

instagram viewer

En note om Escaping Characters

Før vi viser dig eksempler, vil vi gerne pege på noget. Vi skal bruge bash shell og grep-kommandoen til at vise dig, hvordan du bruger almindelige udtryk. Problemet er, at vi nogle gange vil bruge specialtegn, der skal sendes til grep, og bash-skalen fortolker det tegn, fordi skallen også bruger det. Under disse omstændigheder skal vi "undslippe" disse tegn. Dette kan blive forvirrende, fordi denne "undslippe" af tegn også forekommer i regexps. For eksempel, hvis vi ønsker at indtaste dette i grep:

\ & lt;

skal vi erstatte det med:

\\\ & lt;

Hvert særligt tegn her får en tilbageslag. Alternativt kan du også bruge enkle citater:

'\ & lt;'

Enkelt citater fortælle bash IKKE at fortolke, hvad der er inde i dem. Mens vi kræver disse trin, så vi kan demonstrere for dig, vil dine programmer( især GUI-baserede) ofte ikke kræve disse ekstra trin. For at holde tingene enkle og ligefrem, vil det faktiske regulære udtryk blive givet til dig som citeret tekst, og du får vist den undslippede syntaks på kommandolinjens skærmbilleder.

Hvordan udvider de?

Regexps er en meget kortfattet måde at angive vilkår på, så din computer kan udvide dem til flere muligheder. Lad os se på følgende eksempel:

tom [0123456789]

De firkantede parenteser - [og] - fortælle parseringsmotoren, at hvad der er indeni, kan ethvert ONE tegn bruges til at matche. Uanset hvad der er inde i disse parenteser kaldes et tegnsæt.

Så hvis vi havde en enorm liste over indgange, og vi brugte denne regex til at søge, ville følgende vilkår matches:

  • tom
  • tom0
  • tom1
  • tom2
  • tom3

og så videre. Imidlertid vil følgende liste IKKE blive matchet, og så ville ikke vises i dine resultater:

  • tomat;regex redegør ikke for nogen bogstaver efter "tom"
  • Tom;regex er sagerfølsom!

Du kan også vælge at søge med en periode( .), Som vil tillade enhver tegn til stede, så længe der er en tegn til stede.

Som du kan se, grebede

. tom

ikke op på vilkår, der kun havde "tom" i starten. Selv "grønne tomater" kom ind, fordi rummet før "tom" tæller som et tegn, men begreber som "tomF" havde ikke et tegn i begyndelsen og blev dermed ignoreret.

Bemærk: Greps standardadfærd er at returnere en hel tekstlinje, når en del svarer til din regex. Andre programmer kan muligvis ikke gøre dette, og du kan slukke dette i grep med '-o' flag.

Du kan også angive veksling ved hjælp af et rør( |) som her:

speciali( s | z) e

Dette finder både:

  • specialiserer
  • specialiserer

Når du bruger grep-kommandoen, skal vi undslippe specialtegnene|, og) med backslashes samt udnytte '-E' flag for at få dette til at fungere og undgå grimme fejl.

Som vi nævnte ovenfor skyldes det, at vi skal fortælle bash shell at videregive disse tegn til grep og ikke at gøre noget med dem. Flag''E'et fortæller grep at bruge parenteserne og røret som specialtegn.

Du kan søge ved udelukkelse ved hjælp af en hylle, der er inde i dine firkantede parenteser og i begyndelsen af ​​et sæt:

tom [^ F | 0-9]

Igen, hvis du bruger grep og bash, skal du huske at undslippedet rør!

Vilkår, der var på listen, men ikke vises:

  • tom0
  • tom5
  • tom9
  • tomF

Disse matchede ikke vores regex.

Hvordan kan jeg udnytte miljøer?

Ofte søger vi baseret på grænser. Nogle gange vil vi kun have strenge, der vises i begyndelsen af ​​et ord, i slutningen af ​​et ord eller ved enden af ​​en kode. Dette er let kan gøres ved hjælp af det, vi kalder ankre.

Ved hjælp af en karet( uden parentes) kan du angive "begyndelsen" på en linje.

^ tom

Brug dollartegnet for at søge efter enden af ​​en linje.

tom $

Du kan se, at vores søgestreng kommer FØR ankeret i dette tilfælde.

Du kan også til kampe, der vises i begyndelsen eller slutningen af ​​ordene, ikke hele linjer.

\ & lt; tom

tom \ & gt;

Som vi nævnte i notatet i begyndelsen af ​​denne artikel, er vi nødt til at undslippe disse specialtegn, fordi vi bruger bash. Alternativt kan du også bruge enkelte citater:

Resultaterne er de samme. Sørg for at bruge enkle citater og ikke dobbelte citater.

Andre ressourcer til avancerede regexps

Vi har kun ramt toppen af ​​isbjerget her. Du kan også søge efter pengevilkår afgrænset af valutamarkøren og søge efter tre eller flere matchende udtryk. Ting kan blive meget komplicerede. Hvis du er interesseret i at lære mere om regulære udtryk, så tag et kig på følgende kilder.

  • Zytrax.com har et par sider med specifikke eksempler på hvorfor tingene gør og ikke stemmer overens.
  • Regular-Expressions.info har også en killer guide til mange af de mere avancerede ting, samt en praktisk reference side.
  • Gnu.org har en side dedikeret til at bruge regexps med grep.

Du kan også bygge og teste dine regulære udtryk ved hjælp af et gratis Flash-baseret online værktøj kaldet RegExr. Det fungerer som du skriver, er gratis, og kan bruges i de fleste browsere.

Har du en favorit brug for regulære udtryk? Kender til en stor batch renamer, der bruger dem? Måske vil du bare prale om din grep-fu. Bidrage med dine tanker ved at kommentere!