I løpet av den siste måneden eller så har jeg dekket snarveiene og Automator-appene på henholdsvis iOS og macOS. Begge er kraftsentre når det kommer til automatisering i Apples økosystem, og fra og med macOS Monterey denne høsten, vil snarveier være den beste automatiseringsappen på alle Apple-enheter. Dette er grunnen til at jeg ønsket å bruke denne artikkelen på å diskutere et veldig kraftig emne: Bruke regex med Snarveier-appen.
Mens jeg har litt bakgrunn innen informatikk og programmering, hadde jeg liksom aldri kommet over regex. Kanskje navnet skremte meg av, eller kanskje det var koden, som er noe av det minst lesbare koden jeg noen gang har sett.
Uansett, bestemte jeg meg for å se nærmere på regex etter å ha dekket Snarveier-appen de siste månedene. Og det jeg oppdaget var at mange av begrensningene jeg hadde vært borti med snarveier, så vel som Automator, kunne overvinnes med regulær uttrykk.
Med andre ord, det var ikke det at disse appene manglet funksjoner, men at jeg manglet utdanning.
Så i dagens innlegg skal du og jeg lære inn og ut av regex sammen. På den måten kan du få mest mulig ut av hver av disse appene.
Vi skal dekke det grunnleggende om regex (begynner med hva det er), hva du kan gjøre med det i Snarveier-appen, noen nettsteder og ressurser du kan bruke hvis du ikke har lyst til å lære regex selv, og så går vi inn på kjernekonseptene og mekanikken til regex Språk.
Ok, la oss komme i gang!
Innhold
-
Hva er regulære uttrykk (dvs. regex)?
- Ting du kan gjøre med regex
- Hvordan kan du bruke regulært uttrykk med Snarveier-appen?
- Bruk regex101.com for å teste regulære uttrykk
- Hvis du ikke vil lære hvordan du bruker regex med Snarveier-appen, les dette
-
Regex for nybegynnere: Begynn å bruke regulært uttrykk med snarveier
- Hva er regex-smaker?
- Nettsteder og referanser for å hjelpe deg å begynne å lære regex med snarveier
- Hvordan utføre et grunnleggende tekstsøk ved hjelp av regulært uttrykk med snarveier
- Legge til variable komponenter i regex-søkene dine
- Områder kan utvide søket ditt
- Slik ekskluderer du ord og tegn fra regex-søkene dine med snarveier
- Jokertegn kan gi deg flere søkealternativer
- Bruk kvantifiserere for å spesifisere lengden på teksten du leter etter
- Det er noen flere kvantifiserere du vil vite om
- Søk etter tegn på begynnelsen og slutten av en tekststreng
- Lagre tekststrenger ved å bruke grupperingsfunksjonen til regulært uttrykk med snarveier
-
Hva nå?
- Hvordan vil du bryte ned dette?
-
Begynn å bruke regulær uttrykk med snarveier for å ta automatiseringen til neste nivå
- Relaterte innlegg:
Hva er regulære uttrykk (dvs. regex)?
Et regulært uttrykk, eller "regex", er en kodebit som du kan bruke til å søke etter et tekststykke inne i et større tekststykke.
I tilfelle du ikke vet, kalles et tekststykke i et annet tekststykke en "streng" i programmering. For eksempel er ordet "grønn" en rekke tegn fra teksten "Jeg hadde på meg grønne bukser i dag."
Så sagt på en annen måte, regex er en måte å finne en tekststreng i en større tekst. Og fordi regex er skrevet i kode, kan du bruke den til å utføre noen ganske komplekse operasjoner.
Hvis du for eksempel vil søke etter ordet "e-post", kan du enkelt skrive en regulær uttrykkskode som søker etter e-post.
Hvis du imidlertid vil finne en e-post som er inne i et avsnitt, og ikke vet nøyaktig hva den e-posten er, må du søke etter en tekststreng som er formatert som en e-post. dvs. en streng som følger "[e-postbeskyttet]"-format.
La oss nå si at du ikke bare vil finne én e-post fra et avsnitt, men hver e-post. Kanskje du raskt vil kopiere dem et annet sted, oppdatere dem til et nytt format eller erstatte dem slik at de alle sier "[e-postbeskyttet]“.
Etter hvert som du blir stadig mer dyktig og erfaren med regex, vil du kunne gjøre alle disse tingene og mer.
Ting du kan gjøre med regex
Greit, så kanskje eksemplene med e-post jeg nettopp ga ikke er så praktiske. Ikke bekymre deg – det er langt fra grensen for hva du kan oppnå ved å bruke regulært uttrykk med Snarveier-appen.
Generelt sett faller alt regex kan gjøre i en av disse fire kategoriene:
- Finn en tekststreng i et større stykke tekst (dvs. søk etter et ord/streng/type streng på en tekstside).
- Bekreft at en tekststreng samsvarer med ønsket format (dvs. sjekk at en tekststreng er skrevet med store bokstaver/ordnet/punktert riktig).
- Erstatt eller sett inn tekst i et bestemt område av et tekststykke.
- Del opp en tekststreng på angitte punkter (del for eksempel et tekststykke hver gang det er et komma).
Dybdenivået du kan bruke til å samhandle med hver av disse funksjonene og hvordan du kan kombinere dem, gjør regex til et utrolig kraftig verktøy for å analysere og manipulere tekst.
Hvordan kan du bruke regulært uttrykk med Snarveier-appen?
Greit, så nå har du forhåpentligvis en grunnleggende ide om hva regex brukes til. Det er en type kode du kan bruke til å søke etter tekst, selv om du ikke vet nøyaktig hva den teksten er.
Så hvordan hjelper dette deg i snarveier? I likhet med å legge til skript til snarveiene dine, er det en måte å gå fra grunnleggende automatiseringer (Send meg en melding når inngangsdøren åpnes) til mer avanserte alternativer (Opprett automatisk en kalenderhendelse for møtene mine hver gang jeg får en e-post for et Zoom-møte fra jobben).
Du kan bruke regulært uttrykk med snarveier for å sjekke at en inndata er riktig. Hvis du for eksempel oppretter en snarvei som bare fungerer med URL-er, kan du bruke regulært uttrykk i starten av snarveien for å forsikre deg om at brukeren kjører automatiseringen på en URL.
Du kan kombinere regex med skripting for å lage kraftige snarveier. For eksempel, denne snarveien bruker regex og scripting for å gjøre en strekkode til en URL for favorittbutikken din.
Når du bruker Snarveier-appen på Mac (kommer høsten 2021), kan du bruke regulært uttrykk for å utføre batch-handlinger på et tekststykke. Du kan for eksempel kopiere alle e-postene i et utvalg tekst som en ordnet liste. Eller du kan erstatte alle navnene i et dokument med "*"-tegn for å sikre personvernet.
Du kan til og med kopiere en tekstdel fra en app, formatere den om til å matche preferansene til en annen app, og deretter lime den inn i den andre appen, alt med en enkelt høyreklikkhandling.
Regex gir deg med andre ord total kontroll over teksthåndtering med Snarveier-appen. Det høres kanskje ikke veldig nyttig ut til å begynne med, men nå som du vet at det eksisterer, vil du sikkert begynne å legge merke til hvor mange snarveier som kan forbedres med denne funksjonen. Og du vil også legge merke til at mange snarveier ikke engang er mulig uten regulært uttrykk.
Bruk regex101.com for å teste regulære uttrykk
Når du begynner å bruke regulært uttrykk med snarveier, vil du støte på et frustrasjonspunkt:
Det er veldig vanskelig å teste regex-koden din. Og det er ikke unikt for regex. Å teste noe med Snarveier-appen er litt av en smerte. Den eneste måten å gjøre det på er å kjøre snarveien. Den metoden er ikke dårlig når du bare tester innebygde snarveisfunksjoner.
Men for testing av kode tillater ikke dette linje-for-linje-kontroll, og det gir ikke mye tilbakemelding.
For det vil jeg anbefale å bruke regex101.com. Det er et nettsted du kan skrive inn regex-kode i sanntid. Du kan også skrive inn tekst i et tekstredigeringsprogram på samme nettside. Etter hvert som du skriver inn hver, vil du se om det regulære uttrykket ditt fungerer, hvorfor det fungerer eller ikke fungerer, og du får informasjon om samsvarene som er funnet.
regex101.com bruker en annen smak av regex enn den som støttes av snarveier (mer om det om et minutt), men det er nærme nok til at du ikke bør støte på for mange problemer.
Å bruke dette verktøyet er flott fordi du kan skrive regex der først, og deretter kopiere det inn i Snarveier-appen når det fungerer etter hensikten.
Hvis du ikke vil lære hvordan du bruker regex med Snarveier-appen, les dette
Jeg forstår det – ikke alle kommer til å ønske å lære hvordan man bruker regulært uttrykk med snarveier. Det er en ferdighet, og det betyr at det kommer til å kreve tid og øvelse. Det er ikke på langt nær så enkelt som resten av dra-og-slipp-funksjonene i Snarveier-appen.
Ingen bekymringer! Selv om du ikke vil kunne få så mye ut av Snarveier-appen som noen som bruker tid på å lære regex, er det fortsatt tilgjengelige alternativer for deg. Det er nemlig nettsteder og sider på nettet hvor folk har laget en liste over regex-kodebiter som du kan kopiere og lime inn i Snarveier-appen.
Her er noen lenker du kan sjekke ut hvis du ikke vil lære regex:
- https://www.shortcutfoo.com/app/dojos/regex/cheatsheet
- https://www.reddit.com/r/shortcuts/comments/9zo24n/regex_cookbook_for_shortcuts_reusable_regex_to/
- https://www.reddit.com/r/shortcuts/comments/b5labq/match_text_examples_for_the_beginner_a_regex/
- http://www.rexegg.com/regex-cookbook.html
Bare les gjennom disse koblingene, og du bør kunne finne vanlige regex-løsninger til snarveier du vil lage. Dette vil ikke være et utdanningsfritt alternativ, da det fortsatt vil ta litt tid å få taket på hva du ser på. Men det er mye enklere og en ideell løsning for noen som ikke har tid til å sette seg inn i regex.
Når det er sagt, må jeg innrømme at regex ikke er så vanskelig å lære, spesielt hvis du har litt erfaring med skallkode eller nybegynnerprogrammering. Regex hørtes ut som vrøvl for meg til å begynne med, men etter en time med å lese gjennom artikler og leke med regex101.com, kunne jeg begynne å skrive regex for snarveiene mine.
Det er bare en kjent ting – etter at du har sett på det lenge nok, vil det slutte å se så rart ut. Så hvis du har tid og bare er skremt, ikke vær!
Regex for nybegynnere: Begynn å bruke regulært uttrykk med snarveier
Ok, nok forord! Du bør ha en ide om hva regex er, hva det kan gjøre, hvorfor du bør lære det, og nok informasjon til å bestemme om du vil lære det. Nå skal vi gå inn i det tøffe.
Det er mye innhold nedenfor, men ikke bekymre deg! Denne artikkelen kommer til å være mer en studieguide. Jeg anbefaler å skumme over hver seksjon slik at du får en ide om mekanikken som regex bruker. Dette bør også hjelpe deg å vikle hodet rundt det også, hvis du fortsatt er forvirret om hva regex er.
Når du har skummet ting, anbefaler jeg å åpne regex101.com og leke med hvert av verktøyene i hver seksjon nedenfor. Det vil hjelpe deg å se hvordan konseptene ser ut i praksis, samt forbedre hukommelsen din. Etter at du har gjort det, kan du bare behandle denne artikkelen som et referansepunkt - noe du kan komme tilbake til når du glemmer bitene og bobbene til regex.
Ok la oss gå!
Hva er regex-smaker?
Først skal vi se på regex-smaker. Ikke bekymre deg – dette vil ikke påvirke din daglige bruk av regulært uttrykk med snarveier. Det er bare noe å være klar over før du setter i gang.
Det finnes forskjellige versjoner av regex som er kjent som "smaker". Disse forskjellige versjonene er fortsatt veldig like. Hvis du kan lære å lese og skrive én smak, bør du kunne lese hvilken som helst av dem. Det vil bare være små forskjeller i hvordan regex-koden din skal formateres.
I programmering er disse formateringsspesifikasjonene kjent som "syntaks". Det er bare slik du må skrive koden din for at koden skal forstås av appen du skriver den i.
Her er grunnen til at syntaks er viktig
"Hei venn, hvordan går dagen din?"
“, går venn? din hei dag hvordan”
Begge setningene har samme ord, tegn og mellomrom. Men bare én gir mening, og det er fordi den følger konvensjonell syntaks.
I koding kan ett programmeringsspråk forstå den første versjonen, men ikke den andre. For et annet programmeringsspråk kan det andre være fornuftig mens det første ser ut som tull. For noen som kan engelsk, men du kan sikkert forstå intensjonen med begge linjene, selv om man vil kreve litt arbeid for å forstå meningen med.
Det er (slags) hvordan de forskjellige smakene av regex er. De vil alle se litt annerledes ut og litt like deg. Men du må bruke riktig smak for appen du bruker, ellers vil den appen ikke ha noen anelse om hva du har skrevet.
Snarveier-appen forstår ICU-smaken av regex, så det er smaken du vil bruke. Regex101.com-siden har noen forskjellige smaker som du kan velge mellom til venstre på siden. Den bruker imidlertid PCRE, som er ganske lik ICU.
Det er viktig å vite at det er forskjellige smaker av regex fordi du uten tvil vil støte på forskjellige smaker på nettet. Hvis du finner litt regex du vil stjele, men ikke får det til å fungere med snarveier, eller det bare ikke ser bra ut, sjekk hvilken smak det er skrevet i!
Nettsteder og referanser for å hjelpe deg å begynne å lære regex med snarveier
En annen ting jeg vil dekke før vi begynner å utforske den faktiske mekanikken for å skrive regex er ressurser. Jeg påstår på ingen måte at dette innlegget er en uttømmende ressurs for å lære regex. Det er bare ment å være et nyttig utgangspunkt for de som vil bruke regulært uttrykk med snarveier.
Hvis du vil dykke dypere inn i regex eller føler at denne artikkelen ikke gir deg den hjelpen du trenger, kan du sjekke ut noen av disse artiklene, veiledningene og verktøyene:
- https://regex101.com – Et nettsted som lar deg teste regex-koden din i sanntid.
- https://www.shortcutfoo.com/app/dojos/regex/cheatsheet – Et jukseark for når du glemmer hva hver karakter gjør
- http://www.rexegg.com – Denne nettsiden er en omfattende ressurs for å lære alt du trenger å vite om regex. Sjekk denne hvis du vil bli dyktig med regex.
- https://scottwillsey.com/blog/ios/regex1/ – Dette er en firedelt bloggserie om bruk av regex med snarveier. Jeg har en helt annen tilnærming enn denne veiledningen, så den burde være en fin følgeserie til denne artikkelen.
- Stack Overflow og Reddit er begge gode nettsteder for å dele regex-spørsmål og fremgang for å få råd og svar.
Disse ressursene er forskjellige fra de som er oppført i Hvis du ikke vil lære hvordan du bruker regex med Snarveier-appen siden de alle vil kreve at du faktisk begynner å lære regex. De er mer omfattende, mens de andre bare er referansepunkter.
Hvordan utføre et grunnleggende tekstsøk ved hjelp av regulært uttrykk med snarveier
Ok! Vi har nå kommet til det punktet som alle har ventet på: Vi skal lære det grunnleggende om bruk av regulær uttrykk med snarveier.
La oss starte med et grunnleggende søk, siden dette er den enkleste tingen du kan gjøre med regex. Som nevnt før anbefaler jeg å åpne regex101.com i en annen fane slik at du kan følge med.
På sitt mest grunnleggende vil regex søke etter (eller kamp) hva enn du skriver inn i den. For eksempel hvis jeg skulle skrive Ok
som regex-koden min, vil den finne alle forekomster av ordet "Alright" i denne veiledningen.
Store og små bokstaver, mellomrom og tegnsetting har betydning. Det betyr det Ok
, ok
, Ok!
, og Ok ,
kommer alle til å gi forskjellige resultater.
Og det er det! Hver gang du skriver inn noe i et regex-søk uten å bruke noen spesialtegn, vil regex matche alt som samsvarer nøyaktig med det du skrev.
Det er én hake! Noen tegn på tastaturet er også spesielle regex-tegn. Det betyr at de utfører en slags funksjon i regex-kode.
De ?
symbol er et slikt tegn. Den brukes i regex-kode som en kvantifiserer. Så hvis du prøver å søke etter "Ok?" ved å skrive Ok?
som regex-koden din, kommer du ikke til å få det du vil ha.
For å fikse dette, må du spesifisere at du vil bruke "?" som en streng, ikke som et spesialtegn. For å gjøre det for denne karakteren eller en annen, legg til en \
symbol rett før tegnet hvis spesielle egenskaper du vil oppheve.
Så hvis du vil søke etter "Ok?" med regulært uttrykk vil koden din se slik ut:
Ok\?
Hvis du ikke er sikker på om et spesifikt tegn blir behandlet som et spesialtegn av regulært uttrykk, kan du sjekke dette juksearket for alle spesialtegnene i regulært uttrykk.
Søk etter mer enn ett ord ved å bruke "eller"-tegnet
En annen viktig komponent for å søke etter strenger med regex er å bruke "eller"-funksjonen. Dette er et tegn som du kan plassere mellom to ord/tegn for å si: "Samsvar dette eller dette."
Hvis jeg for eksempel vil søke i en tekstdel etter ordene "alright" og "Ok", vil jeg bruke |
karakter. Som så:
Greit| greit
Hvis du har vanskelig for å finne |
karakter, hold skifte tast ned og trykk på \
nøkkel. Det er over komme tilbake tasten på de fleste tastaturer.
Legge til variable komponenter i regex-søkene dine
Ok, så nå som du vet hvordan nøytral regex er, er det på tide å plukke opp din første spesialkarakter. Det ville være de firkantede parentesene, som er disse tingene []
.
Uansett hva du legger innenfor disse parentesene vil bli betraktet som en variabel komponent av regex-søket ditt. Du kan sette så mange tegn i parentesene du vil, selv om bare én vil være gyldig per kamp.
Ok, det høres litt komplisert ut, men det er det ikke! Slik ser det ut i praksis:
-
[Ok
vil bare matche ordet "Alright". Litt meningsløst. -
[AB] greit
vil matche både "Alright" og "Blright". -
Alr[iouxyz]ght
vil samsvare med "Alright", "Alroght", "Alrught", "Alrxght", og så videre.
Du kan kombinere tegn innenfor parentes samt bruke flere parenteser i samme linje med regulært uttrykk. [AB]r[i1]gh[tuvwxyz]
er en gyldig del av regulært uttrykk. Forhåpentligvis ser det imidlertid ikke fullt så kaotisk ut som det kunne ha vært for noen minutter siden!
Områder kan utvide søket ditt
Den neste delen av regex som vil være nyttig med snarveier er rekkevidden. Områder lar deg spesifisere en rekke tegn du godtar.
I forrige seksjon har du kanskje lagt merke til at parentesene mine inkluderte mange påfølgende bokstaver. Den lengste var [tuvwxyz]
. Disse bokstavene vises i alfabetet i samme rekkefølge, rett ved siden av hverandre.
Det betyr at jeg kunne bruke en rekkevidde i stedet for å skrive dem ut. Det vil se slik ut:
Greit[t-z]
Denne delen av regex-koden vil gjøre det samme som Greit[tuvwxyz]
. Det er bare ryddigere og lettere å skrive.
Du kan erstatte det samme området med [a-z]
hvis du ville at den skulle godta en hvilken som helst liten bokstav fra alfabetet. Eller du kan bruke [0-9]
hvis du ønsker å godta et enkeltsifret nummer.
Du kan også kombinere områder innenfor samme parentes. For eksempel dette Alr[i-ux-z]ght
vil godta "Alright", "Alroght", "Alrxght" og "Alryght", men den vil ikke godta "Alraght" eller "Alrvght".
Det er andre varianter av ordet "Alright" som denne koden vil godta, forresten, og mange flere som den ikke vil. Det er bare et kort utvalg for å holde ting, vel, kort.
Hvis du har vanskelig for å forstå hva [i-ux-z]
betyr at det kan hjelpe å se det skrevet slik:
[i-u, x-z]
Det er ikke riktig regex-syntaks - du bør ikke bruke komma for å skille områder. Men forhåpentligvis hjelper det det til å gi mer mening!
Du trenger ikke komma i regulært uttrykk for å skille områder, og du trenger ikke å sette områder rett ved siden av hverandre. Du kan endre det til [i-uabcx-z]
. Dette vil akseptere de samme områdene som før pluss tegnene "a", "b" og "c".
Slik ekskluderer du ord og tegn fra regex-søkene dine med snarveier
Ok, så nå kommer vi et sted! Hvis du har fulgt denne artikkelen frem til dette punktet, bør du kunne se på koden nedenfor og forstå hva den passer til:
App[p-r]le[Tt]ool[BbLF]ox
Hvis du kan lese den, så vet du at den regex-koden inkluderer mye av mulige varianter av ordet "AppleToolBox". Så hva om vi ønsket å redusere antallet varianter den godtar uten å endre utvalget vårt?
Det er her "ikke"-karakteren kommer inn. Det ser slik ut: ^
. Hvis du har problemer med å finne den på tastaturet (som jeg gjorde), hold skifte og trykk på 6 tasten på tastaturet.
For å bruke ^
tegn, plasser det i begynnelsen av tegnet du vil ekskludere.
Det er en hake! De ^
tegnet fungerer ikke utenfor en regulær uttrykksfunksjon. Du kan ikke bare plassere den foran bokstaven "A" for å få den til å ekskludere den bokstaven fra søket. Regex-koden ^A
vil bare søke etter stor "A".
Kombiner den i stedet med parenteser og andre regulære spesialtegn.
For eksempel, hvis jeg ønsket å søke etter en forekomst av ordet "Alright" som ikke starter med bokstaven "A", ville jeg brukt koden [^A] greit
.
Du kan til og med kombinere det med serier! Bare sett det i begynnelsen av parentesen, og alt innenfor den parentesen, inkludert områder, vil bli ekskludert fra søket. Som så:
Hva om du vil ekskludere et bestemt ord fra søket?
Jeg hadde vanskelig for å finne denne informasjonen. En Stack Overflow-bruker hadde imidlertid løsningen, og den ser slik ut:
^(?!(ord)$).+$
Bare bytt ut ord
med det ordet du vil ekskludere fra søket. Som så:
Du kan lese det Stack Overflow-innlegget her hvis du vil lære mer om denne spesifikke brukssaken.
Jokertegn kan gi deg flere søkealternativer
Det bringer oss til jokertegn. Jokertegnet, som er en periode .
, brukes til å representere et enkelt tegn, uten unntak. Hvis du bare skriver .
som regex-koden din med snarveier, vil den returnere hvert enkelt tegn i en tekst som et individuelt samsvar.
Jeg vil selvfølgelig ikke anbefale å bruke den til det formålet! I stedet anbefaler jeg å bruke det i stedet for et enkelt tegn i et ord. For eksempel, Ok
vil samsvare med "Alright", "Alrxght", "Alr
Og det er stort sett det! Jokertegnet er ganske enkelt å forstå. Det passer til alt! Det gjør det nyttig for å finne strenger som matcher et spesifikt format samtidig som de har unike tegn.
E-poster, for eksempel, kommer alle til å se ganske like ut uten å være like. Jokertegnet kan hjelpe deg med å kombinere elementer du vet kommer til å være der (som ".com" og "@") med tegn du ikke kjenner (som "my_email567", iCloud eller "Gmail").
Et annet interessant bruksområde er å bruke .
tegn for å finne strenger av en bestemt lengde.
For eksempel, hvis jeg vil finne hver fire-tegns streng i en tekst, kan jeg bruke ...
med et mellomrom på hver side.
Og her er alle de syv tegnstrengene i den samme teksten:
Merk at dette ikke er en perfekt metode for å finne strenger med en viss lengde. Som du kan se i eksemplene ovenfor, er noen strenger matchet som ikke burde vært, og noen som burde blitt ignorert. Det er bare interessant å huske at du kan bruke .
tegn for å telle tegn.
Husk også at .
er et spesialtegn i regulært uttrykk. Det betyr at du må legge til en \
foran hvis du vil søke etter perioder. Det betyr at du må bruke Ok\.
for å matche «Ok».
Bruk kvantifiserere for å spesifisere lengden på teksten du leter etter
Greit, så du kan teknisk sett bruke .
tegn for å finne en streng som tar opp et spesifikt antall tegn. Mesteparten av tiden vil du imidlertid være mer spesifikk.
Det er her kvantifiserere kommer inn. Kvantifiserere lar deg spesifisere lengden på strengen du leter etter når du bruker regex med snarveier.
Si for eksempel at du vil finne et ord som er spesifikt tre bokstaver langt. For å spesifisere det, vil du bruke disse parentesene:
{}
Når du plasserer disse brakettene etter disse []
parentes, spesifiserer du at du vil ha en streng som samsvarer med antall tegn i denne {}
og rekkevidden av tegn som er spesifisert i denne []
.
Jeg er sikker på at det ikke gir mye mening nå, så la oss se på et eksempel!
Si at du ønsker å finne årstall nevnt i en tekst. Siden et år består av fire tall (åpenbart ikke hvert år fra alle tider, bare følg meg her), kan du bruke denne koden for å matche år i den teksten:
[0-9]{4}
Denne koden sier at vi vil ha en streng som består av tegn fra 0 til 9 som spesifikt er fire tegn lang. Du kan se hvordan den lokaliserer denne spesifikke strengen i følgende skjermbilde:
Jeg bør merke meg at det er noen problemer med denne regex-koden, og det er at den ikke tar hensyn til mellomrom eller tegnsetting. Så hvis koden finner et tall som er mer enn fire tegn langt, som "12345678", vil den finne strengen "1234" og strengen "5678".
For å fikse dette problemet, vil du legge til et mellomrom i begynnelsen av koden og en parentes etter {4}
som inneholder et annet mellomrom, et punktum, et spørsmålstegn, et komma og et utropstegn. På den måten vil den overse lange rekker med tall uten å mangle strenger med tall som har tegnsetting på slutten i stedet for et mellomrom.
Det kan også være lurt å bruke kvantifiserere for å spesifisere mer enn én lengde på strengen. For eksempel, kanskje jeg vil finne en streng på fire tegn, men også syv og elleve også. Slik vil det se ut:
[a-z]{4,7,11}
Det er noen flere kvantifiserere du vil vite om
Ok, så det er fortsatt flere kvantifiserere! Disse siste kvantifikatorene er for når du vil spesifisere lengden på en streng uten å være for spesifikk.
Si for eksempel at du vil finne en streng av hvilken som helst lengde som regulært uttrykk kan matche. Som et navn! Navn (i vestlige land) starter med en stor bokstav og slutter med et tilfeldig antall små bokstaver, etterfulgt av et mellomrom. For å finne et navn, skriver du følgende kode:
[A-Z][a-z]*
[A-Å]
spesifiserer at det første tegnet i strengen skal være en stor bokstav. [a-z]*
spesifiserer at resten av strengen skal bestå av små bokstaver, men det spiller ingen rolle hvor mange bokstaver som følger. Og mellomrom på slutten betyr at den vil avslutte kampen når den finner et mellomrom på slutten av de små bokstavene.
En gylden kombinasjon i regex er .*
. Det betyr å matche enhver karakter i det uendelige. Med andre ord vil den samsvare med hele teksten som ett element.
Den neste kvantifisereren du trenger å vite er +
. Denne er akkurat som *
bortsett fra at den ikke samsvarer med en streng med null tegn. *
vil matche hvilken som helst lengde på strengen, som inkluderer strenger som ikke har noen lengde. +
, på den annen side, trenger en streng med minst ett tegn eller flere.
Til slutt er det ?
kvantifiserer. Dette er en merkelig en. Den spesifiserer at en streng er enten null tegn lang eller ett tegn lang. Det er det - enten ingenting eller bare en. Så hvis du bruker koden [a-z]?
med et mellomrom i begynnelsen og slutten, vil den se etter enkeltbokstaver i en tekst.
Søk etter tegn på begynnelsen og slutten av en tekststreng
Vi nærmer oss slutten av guiden vår om bruk av regulær uttrykk med snarveier! Det er bare to andre typer regulært uttrykk-kode du vil bruke med snarveier.
Den første er tegn som lar deg matche strenger basert på hvordan de begynner og/eller slutter.
Når den ikke er i parentes, ^
karakterens rolle endres fra å bety "ekskludere" til "begynner med". Den spesifiserer at en streng skal begynne med hva du vil. For eksempel hvis du skriver ^A
, som vil samsvare med bokstaven "A" i strengene "Alright", "Apple" og "A".
Det stemmer imidlertid ikke med hele ordet. For det må du endre den til ^A[A-Za-z]*
. Det vil samsvare med det første ordet i et avsnitt/streng, så lenge det ordet starter med stor "A".
Som en sidenotat kan du skrive [A-Za-z]
som [A-z]
. Det betyr det samme, jeg finner bare ut at det første er litt tydeligere når du lærer.
For å spesifisere slutten av strengen, vil du bruke $
karakter. Det fungerer på samme måte som ^
karakter. Den eneste forskjellen er at du skriver det på slutten av en parentes/streng i stedet for begynnelsen.
For eksempel, hvis du ville finne strenger/avsnitt som slutter med "le", ville du brukt koden [A-z]*le$
. Det vil matche "Tabell", "eple" og "kapabel" så lenge de er på slutten av en streng eller et avsnitt.
Regex vil til og med nekte denne kampen hvis det er et mellomrom eller skilletegn på slutten av strengen. "Bord." vil ikke bli matchet av denne koden.
For å fikse det, kan du ta med tegnsetting. Denne koden står for ulike former for tegnsetting og mellomrom som kan oppstå på slutten av en streng, inkludert et skilletegn etterfulgt av et mellomrom:
[A-z]*(le[\.\?!, ]?[ ]?)$
Den koden vil samsvare med "Able", "table", "stable" og "capable? “.
Lagre tekststrenger ved å bruke grupperingsfunksjonen til regulært uttrykk med snarveier
Ok! Du har kommet til slutten av AppleToolBox-guiden vår om bruk av regulært uttrykk med snarveier. Det er bare en regex-funksjon til igjen å lære, og det er gruppering.
Gruppering er uten tvil den viktigste funksjonen til regex, da det er det som lar deg gjøre ting med regex-koden du skriver. Uten det er regex bare en søkefunksjon. Den kan bare fortelle deg om det finnes en streng i en større tekstdel, det vil si at den returnerer "true" eller "false".
Med gruppering kan du imidlertid lagre resultatene av regex-koden din. Og det betyr at du kan kopiere treff, lagre dem i variabler, erstatte dem med annen tekst, endre formateringen og alt annet du ønsker å gjøre med regex.
Heldigvis er gruppering superenkelt! Bare sett det du vil gruppere i parentes ()
. Det du setter i parentes vil bli behandlet som en gruppe.
Hvis du setter en hel linje med regex-kode innenfor parentes, som (.*@.*\..{3})
, så vil den gruppen bli husket av koden din, noe som gjør at den kan hentes tilbake senere på linjen.
Det er viktig at du bare bruker grupper når du trenger det. Siden de er lagret i minnet, kan de føre til at kodens ytelse reduseres. Lagre grupper for når de trengs!
Du kan også bruke grupper for organisering
Du kan også bruke grupper til å organisere regex-koden din med snarveier. Når du gjør dette, vil ikke nødvendigvis gruppen i parentesen bli husket.
Si for eksempel at jeg vil matche ordet "Hei", bortsett fra at jeg ikke bryr meg om hva den siste bokstaven er. Det kan være en hvilken som helst liten eller stor bokstav eller til og med et tall. "Hell3838djdjajaksks" og "Hello" skal telles som treff. "Helvete" skal derimot ikke telles.
For å få dette til å fungere skriver jeg koden Helvete[A-z]|[0-9]+
. Men dette er resultatet jeg får:
Grunnen til at det ikke samsvarer slik jeg forventet er at +
blir bare brukt på [0-9]
brakett. Jeg trenger den til å gjelde begge parentesene.
I tillegg sier denne koden at jeg vil ha enten Helvete[A-z]
eller[0-9]
. Så det samsvarer med ord som begynner med "Helvete" og slutter med en bokstav, eller det leter etter en rekke tall. Det jeg faktisk trenger er at det samsvarer med forekomster av ordet "Helvete" som slutter med en bokstav eller et tall.
For å fikse dette kan jeg bruke en gruppe og skrive om koden som Helvete([A-z]|[0-9])+
. Nå leter den etter ordet "Helvete" etterfulgt av en bokstav eller tall. Og fordi +
brukes på begge parenteser, kan det være en hvilken som helst kombinasjon av bokstaver og tall, så lenge det er minst én bokstav eller tall til stede.
Som du kan se på skjermbildet nedenfor, løser denne gruppen problemet mitt uten å nødvendigvis lagre informasjonen i den gruppen:
Hva nå?
Og det er det! Det er nesten alt du noen gang vil vite om bruk av regex med snarveier. Forhåpentligvis føler du deg trygg nok til å begynne å eksperimentere med regex nå, selv om det ikke ga mening for deg i begynnelsen.
Nå som du vet det grunnleggende om regex, er du klar til å begynne å bruke det i snarveiene dine! Snarveier godtar regex-inndata i følgende handlinger:
- Match tekst
- Erstatt tekst
Ved å bruke disse to snarveiene kan du sette inn regulært uttrykk i snarveiene dine.
Par dette med automatiseringsmulighetene til snarveier, og du har et ganske kraftig verktøy til rådighet.
Du kan bruke regulært uttrykk for å gjøre formatering av tekst i snarveier enklere, for å hente informasjon fra e-poster, tekster, nettsteder, filer og kalenderhendelser, lage tekst som følger et spesifisert format, kontrollere at inndata ble skrevet inn riktig, og mer.
Si for eksempel at du vil matche for e-poster. Kanskje du må sjekke at en tekststreng er en e-post, eller kanskje du vil trekke en e-post(er) fra en tekst.
Hvordan vil du bryte ned dette?
Vel, du vet at den grunnleggende strukturen til en e-post vil være en kombinasjon av bokstaver, tall og tegn, etterfulgt av "@"-symbolet, deretter etterfulgt av navnet på et nettsted som Gmail eller iCloud, som deretter blir fulgt av en ".com", ".org" eller en annen type toppnivå med tre tegn domene.
For å skrive det i regulært uttrykk, må du spesifisere at du vil ha en streng på minst ett tegn lang som umiddelbart følges med «@»-symbolet, deretter en annen streng på minst ett tegn, etterfulgt av en «.», deretter etterfulgt av en streng på tre tegn. Det vil se slik ut:
[e-postbeskyttet]+\..{3}
Hvis du limer dette inn i Match tekst eller Erstatt tekst handlinger i snarveier, vil du ha en automatisering som kan finne, lagre og manipulere en e-postadresse.
Du kan bruke denne typen problemløsning til å komme opp med dine egne regex-løsninger eller finne noen som andre har laget på nettet!
Begynn å bruke regulær uttrykk med snarveier for å ta automatiseringen til neste nivå
Og det, venner, er det egentlig. Jeg håper du likte å følge denne artikkelen! Dette er et av de mer ambisiøse stykkene jeg noen gang har skrevet for AppleToolBox. Jeg måtte lære meg regex for å skrive det, og jeg håper at jeg ved å gjøre det kunne hjelpe deg med å lære det.
Å bruke regulært uttrykk med snarveier er ikke annerledes enn å lære å gjøre noe annet på smarttelefonen eller datamaskinen. Bare bruk litt tid og tålmodighet, og til slutt kommer du dit.
For flere guider, veiledninger og nyheter om alt som har med Apple å gjøre, sjekk ut resten av AppleToolBox-bloggen.
Ok [A-Z][a-z]+
, vi sees neste gang!