Sådan begynder du at bruge Regex med genvejsappen

I løbet af den sidste måned eller deromkring har jeg dækket genveje og Automator-apps på henholdsvis iOS og macOS. Begge er kraftcentre, når det kommer til automatisering i Apples økosystem, og begyndende med macOS Monterey til efteråret, vil genveje være go-to-automatiseringsappen på alle Apple-enheder. Det er derfor, jeg ønskede at bruge denne artikel på at diskutere et meget kraftfuldt emne: Brug af regex med appen Genveje.

Selvom jeg har en vis baggrund inden for datalogi og programmering, var jeg på en eller anden måde aldrig stødt på regex. Måske skræmte navnet mig væk, eller måske var det koden, som er noget af det mindst læsbare kode, jeg nogensinde har set.

Uanset hvad, besluttede jeg at se nærmere på regex efter at have dækket appen Genveje i løbet af de sidste par måneder. Og hvad jeg opdagede var, at mange af de begrænsninger, jeg var løbet ind i med genveje, såvel som Automator, kunne overvindes med regex.

Det var med andre ord ikke, at disse apps manglede funktioner, men at jeg manglede uddannelse.

Så i dagens indlæg skal du og jeg lære ins og outs af regex sammen. På den måde kan du få mest muligt ud af hver af disse apps.

Vi kommer til at dække det grundlæggende i regex (startende med hvad det er), hvad du kan gøre med det i appen Genveje, nogle websteder og ressourcer, du kan bruge, hvis du ikke selv har lyst til at lære regex, og så går vi ind på kernekoncepterne og mekanikken i regex Sprog.

Okay, lad os komme i gang!

Indhold

  • Hvad er regulære udtryk (dvs. regex)?
    • Ting du kan gøre med regex
  • Hvordan kan du bruge regex med appen Genveje?
  • Brug regex101.com til at teste dine regulære udtryk
  • Hvis du ikke vil lære, hvordan du bruger regex med appen Genveje, så læs dette
  • Regex for begyndere: Begynd at bruge regex med genveje
    • Hvad er regex-smag?
    • Websites og referencer, der hjælper dig med at begynde at lære regex med genveje
    • Sådan udføres en grundlæggende tekstsøgning ved hjælp af regex med genveje
    • Tilføjelse af variable komponenter til dine regex-søgninger
    • Områder kan udvide din søgning
    • Sådan udelukker du ord og tegn fra dine regex-søgninger med genveje
    • Jokertegn kan give dig flere søgemuligheder
    • Brug kvantifikatorer til at angive længden af ​​tekst, du leder efter
    • Der er et par flere kvantifikatorer, du gerne vil vide om
    • Søg efter tegn i begyndelsen og slutningen af ​​en tekststreng
    • Gem tekststrenge ved hjælp af grupperingsfunktionen i regex med genveje
  • Hvad nu?
    • Hvordan ville du nedbryde dette?
  • Begynd at bruge regex med genveje for at tage din automatisering til næste niveau
    • Relaterede indlæg:

Hvad er regulære udtryk (dvs. regex)?

Et regulært udtryk, eller "regex", er en smule kode, som du kan bruge til at søge efter et stykke tekst inde i et større stykke tekst.

Hvis du ikke ved det, kaldes et stykke tekst i et andet stykke tekst en "streng" i programmering. For eksempel er ordet 'grøn' en række tegn fra teksten "Jeg havde grønne bukser på i dag."

Så sagt på en anden måde er regex en måde at lokalisere en tekststreng i en større tekst. Og fordi regex er skrevet i kode, kan du bruge det til at udføre nogle ret komplekse operationer.

For eksempel, hvis du vil søge efter ordet "e-mail", kan du nemt skrive en regex-kode, der søger efter e-mail.

Hvis du dog vil finde en e-mail, der er inde i et afsnit, og ikke ved præcis, hvad den e-mail er, så skal du søge efter en tekststreng, der er formateret som en e-mail. dvs. en streng, der følger "[e-mailbeskyttet]" format.

Lad os nu sige, at du ikke kun vil finde en e-mail fra et afsnit, men hver e-mail. Måske vil du hurtigt kopiere dem et andet sted, opdatere dem til et nyt format eller erstatte dem, så de alle siger "[e-mailbeskyttet]“.

Efterhånden som du bliver mere og mere dygtig og erfaren med regex, vil du være i stand til at gøre alle disse ting og mere.

Ting du kan gøre med regex

Okay, så måske er eksemplerne med e-mail, jeg lige har givet, ikke så praktiske. Bare rolig - det er langt fra grænsen for, hvad du kan opnå ved at bruge regex med appen Genveje.

Generelt falder alt, hvad regex kan gøre, i en af ​​disse fire kategorier:

  1. Find en tekststreng i et større stykke tekst (dvs. søgning efter et ord/streng/type streng på en side med tekst).
  2. Bekræft, at en tekststreng matcher dit ønskede format (dvs. tjek, at en tekststreng er skrevet med stort/ordnet/tegnsætning korrekt).
  3. Erstat eller indsæt tekst i et bestemt område af et stykke tekst.
  4. Del en tekststreng op på bestemte punkter (del f.eks. et stykke tekst, hver gang der er et komma).

Det dybdeniveau, du kan bruge til at interagere med hver af disse slags funktioner, og hvordan du kan kombinere dem, gør regex til et utroligt kraftfuldt værktøj til at analysere og manipulere tekst.

Hvordan kan du bruge regex med appen Genveje?

Okay, så nu har du forhåbentlig en grundlæggende idé om, hvad regex bruges til. Det er en type kode, som du kan bruge til at søge efter tekst, selvom du ikke ved præcis, hvad den tekst er.

Så hvordan hjælper dette dig i genveje? I lighed med at tilføje scripting til dine genveje, er det en måde at gå fra grundlæggende automatiseringer (Skriv til mig, når hoveddøren åbnes) til mere avancerede muligheder (Opret automatisk en kalenderbegivenhed til mine møder, hver gang jeg får en e-mail til et Zoom-møde fra arbejdet).

Du kan bruge regex med genveje for at kontrollere, at et input er korrekt. For eksempel, hvis du opretter en genvej, der kun virker med URL'er, kan du bruge regulært udtryk i starten af ​​genvejen for at sikre, at brugeren kører automatiseringen på en URL.

Du kan kombinere regex med scripting for at skabe kraftfulde genveje. For eksempel, denne genvej bruger regex og scripting til at omdanne en stregkode til en URL for din yndlingsbutik.

Når du bruger appen Genveje på Mac (kommer efteråret 2021), kan du bruge regex til at udføre batchhandlinger på et stykke tekst. For eksempel kan du kopiere alle e-mails i et udvalg af tekst som en ordnet liste. Eller du kan erstatte alle navnene i et dokument med "*"-tegn for at sikre privatlivets fred.

Du kan endda kopiere en teksttekst fra én app, omformatere den, så den matcher præferencerne for en anden app, og derefter indsætte den i den anden app, alt sammen med et enkelt højreklik.

Med andre ord giver regex dig total kontrol over teksthåndtering med appen Genveje. Det lyder måske ikke særlig nyttigt i starten, men nu hvor du ved, at det eksisterer, vil du helt sikkert begynde at lægge mærke til, hvor mange genveje, der kan forbedres af denne funktion. Og du vil også bemærke, at mange genveje ikke engang er mulige uden regex.

Brug regex101.com til at teste dine regulære udtryk

Når du begynder at bruge regex med genveje, vil du løbe ind i et frustrationspunkt:

Det er virkelig svært at teste din regex-kode. Og det er ikke unikt for regex. At teste noget med appen Genveje er lidt af en smerte. Den eneste måde at gøre det på er at køre genvejen. Den metode er ikke dårlig, når du bare tester indbyggede genvejsfunktioner.

Men for at teste kode giver dette ikke mulighed for linje-for-linje kontrol, og det giver ikke megen feedback.

Til det vil jeg anbefale at bruge regex101.com. Det er et websted, som du kan skrive regex-kode på i realtid. Du kan også skrive tekst i en teksteditor på den samme webside. Når du skriver hver, vil du se, om dit regex virker, hvorfor det virker eller ikke virker, og du får information om de fundne matcher.

regex101.com bruger en anden variant af regex end den, der understøttes af genveje (mere om det om et minut), men det er tæt nok på, at du ikke bør løbe ind i for mange problemer.

Det er fantastisk at bruge dette værktøj, fordi du kan skrive dit regex der først, og derefter kopiere det til genvejsappen, når det fungerer efter hensigten.

Hvis du ikke vil lære, hvordan du bruger regex med appen Genveje, så læs dette

Jeg forstår det – ikke alle har lyst til at lære at bruge regex med genveje. Det er en færdighed, og det betyder, at det kommer til at kræve tid og øvelse. Det er ikke nær så simpelt som resten af ​​træk-og-slip-funktionerne i appen Genveje.

Ingen problemer! Selvom du ikke vil være i stand til at få så meget ud af appen Genveje som en person, der har brugt tid på at lære regex, er der stadig muligheder for dig. Der er nemlig sider og sider på nettet, hvor folk har lavet en liste over regex-kodebid, som du kan kopiere og indsætte i Genvejs-appen.

Her er nogle links, som du kan tjekke ud, 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 læs disse links igennem, og du burde være i stand til at finde almindelige regex-løsninger til genveje, du vil lave. Dette vil ikke være en uddannelsesfri mulighed, da det stadig vil tage lidt at få fat i, hvad du ser på. Men det er meget enklere og en ideel løsning for nogen, der ikke har tid til at sætte ind i regex.

Når det er sagt, må jeg indrømme, at regex ikke er for svært at lære, især hvis du har lidt erfaring med shell-kode eller begynderprogrammering. Regex lød som volapyk for mig i starten, men efter en times læsning af artikler og leg med regex101.com, var jeg i stand til at begynde at skrive regex til mine genveje.

Det er bare en kendskabsting - når du har kigget længe nok på det, holder det op med at se så mærkeligt ud. Så hvis du har tid og bare er skræmt, så lad være!

Regex for begyndere: Begynd at bruge regex med genveje

Okay, nok forord! Du bør have en idé om, hvad regex er, hvad det kan, hvorfor du skal lære det, og nok information til at beslutte, om du vil lære det. Nu skal vi ind i det småting.

Der er meget indhold nedenfor, men bare rolig! Denne artikel bliver mere en studievejledning. Jeg anbefaler at skimme over hver sektion, så du får en idé om den mekanik, som regex bruger. Dette bør også hjælpe dig med at vikle dit hoved omkring det, hvis du stadig er forvirret over, hvad regex er.

Når du har skimmet tingene, anbefaler jeg at åbne regex101.com og lege med hvert af værktøjerne i hver sektion nedenfor. Det vil hjælpe dig med at se, hvordan koncepterne ser ud i praksis samt forbedre din hukommelse. Når du har gjort det, kan du bare behandle denne artikel som et referencepunkt - noget du kan vende tilbage til, når du glemmer stykkerne af regex.

Ok lad os gå!

Hvad er regex-smag?

Først skal vi se på regex-smag. Bare rolig - dette vil ikke påvirke din daglige brug af regex med genveje. Det er bare noget, du skal være opmærksom på, inden du går i gang.

Der er forskellige versioner af regex, som er kendt som "flavors". Disse forskellige versioner er stadig meget ens. Hvis du kan lære at læse og skrive en smagsvariant, bør du være i stand til at læse enhver af dem. Der vil kun være små forskelle i, hvordan din regex-kode skal formateres.

I programmering er disse formateringsspecifikationer kendt som "syntaks". Det er bare sådan, du skal skrive din kode, for at den kode kan forstås af den app, du skriver den i.

Her er grunden til, at syntaks er vigtig

"Hej ven, hvordan går din dag?"

“, går ven? din hej dag hvordan”

Begge sætninger har de samme ord, tegn og mellemrum. Kun én giver dog mening, og det er fordi den følger konventionel syntaks.

I kodning kan et programmeringssprog måske forstå den første version, men ikke den anden. For et andet programmeringssprog kan det andet dog give fuldstændig mening, mens det første ligner volapyk. For en, der kan tale engelsk, kan du dog sikkert forstå hensigten med begge linjer, selvom man vil tage lidt arbejde at få betydningen af.

Det er (en slags) hvordan de forskellige varianter af regex er. De vil alle se lidt anderledes ud og ligner dig en smule. Men du skal bruge den rigtige smag til den app, du bruger, ellers vil den app ikke have nogen anelse om, hvad du har skrevet.

Genvejsappen forstår ICU-smag af regex, så det er den smag, du vil bruge. Regex101.com-siden har et par forskellige varianter, som du kan vælge imellem til venstre på siden. Det bruger dog PCRE, hvilket er ret lig ICU.

Det er vigtigt at vide, at der er forskellige varianter af regex, fordi du uden tvivl vil løbe ind i forskellige varianter online. Hvis du finder en smule regex, du gerne vil stjæle, men ikke kan få det til at fungere med genveje, eller det bare ikke ser rigtigt ud, så tjek hvilken smag det er skrevet i!

Websites og referencer, der hjælper dig med at begynde at lære regex med genveje

En anden ting, jeg vil dække, før vi begynder at udforske den faktiske mekanik ved at skrive regex, er ressourcer. Jeg påstår på ingen måde, at dette indlæg er en udtømmende ressource til at lære regex. Det er bare ment som et nyttigt udgangspunkt for dem, der ønsker at bruge regex med genveje.

Hvis du vil dykke dybere ned i regex eller føler, at denne artikel ikke giver dig den hjælp, du har brug for, kan du tjekke nogle af disse artikler, guider og værktøjer:

  • https://regex101.com – Et websted, der lader dig teste din regex-kode i realtid.
  • https://www.shortcutfoo.com/app/dojos/regex/cheatsheet – Et snydeark til, når du glemmer, hvad hver karakter gør
  • http://www.rexegg.com – Denne hjemmeside er en omfattende ressource til at lære alt, hvad du behøver at vide om regex. Tjek denne ud, hvis du ønsker at blive dygtig med regex.
  • https://scottwillsey.com/blog/ios/regex1/ – Dette er en firedelt blogserie om brug af regex med genveje. Jeg har en meget anden tilgang end denne vejledning, så den burde være en fin ledsagerserie til denne artikel.
  • Stack Overflow og Reddit er begge gode websteder til at dele dine regex-spørgsmål og fremskridt for at få råd og svar.

Disse ressourcer er forskellige fra dem, der er anført i Hvis du ikke vil lære at bruge regex med appen Genveje afsnit, da de alle vil kræve, at du faktisk begynder at lære regex. De er mere omfattende, mens de andre kun er referencepunkter.

Sådan udføres en grundlæggende tekstsøgning ved hjælp af regex med genveje

I orden! Vi er nu kommet til det punkt, som alle har ventet på: Vi skal lære det grundlæggende ved at bruge regex med genveje.

Lad os starte med en grundlæggende søgning, da dette er den enkleste ting, du kan gøre med regex. Som før nævnt anbefaler jeg at få åbnet regex101.com i en anden fane, så du kan følge med.

På det mest basale vil regex søge efter (eller match) hvad end du skriver ind i det. For eksempel hvis jeg skulle skrive I orden som min regex-kode ville den finde alle forekomster af ordet "Okay" i denne guide.

Store og små bogstaver, mellemrum og tegnsætning har betydning. Det betyder det I orden, i orden, I orden!, og I orden , vil alle give forskellige resultater.

Og det er det! Når du skriver noget i en regex-søgning uden at bruge nogen specialtegn, vil regex matche alt, der matcher nøjagtigt det, du har skrevet.

Der er én fangst! Nogle tegn på dit tastatur er også specielle regex-tegn. Det betyder, at de udfører en form for funktion i regex-kode.

Det ? symbol er et sådant tegn. Det bruges i regex-kode som en kvantifier. Så hvis du prøver at søge efter "Okay?" ved at skrive I orden? som din regex-kode, får du ikke det, du vil have.

For at rette op på dette skal du angive, at du vil bruge "?" som en streng, ikke som et specialtegn. For at gøre det for denne karakter eller enhver anden, skal du blot tilføje en \ symbol lige før det tegn, hvis særlige egenskaber du vil annullere.

Så hvis du vil søge efter "Okay?" med regex vil din kode se sådan ud:

I orden\?

Hvis du ikke er sikker på, om et bestemt tegn behandles som et specialtegn af regex, kan du tjekke dette snydeark for alle specialtegnene i regulært udtryk.

Søg efter mere end ét ord ved at bruge tegnet "eller".

En anden vigtig komponent i at søge efter strenge med regex er at bruge "eller"-funktionen. Dette er et tegn, som du kan placere mellem to ord/karakterer for at sige: "Match dette eller dette."

Hvis jeg f.eks. vil søge i en tekst efter ordet "okay" og "okay", vil jeg bruge | Karakter. Ligesom:

Okay|okay

Hvis du har svært ved at finde | karakter, hold flytte tast ned og tryk på \ nøgle. Det er over Vend tilbage tasten på de fleste tastaturer.

Tilføjelse af variable komponenter til dine regex-søgninger

Ok, så nu hvor du ved, hvordan neutral regex er, er det tid til at hente din første specielle karakter. Det ville være de firkantede parenteser, som er disse ting [].

Uanset hvad du sætter inden for disse parenteser, vil det blive betragtet som en variabel komponent i din regex-søgning. Du kan sætte så mange tegn i parentes, som du vil, selvom kun én vil være gyldig pr. kamp.

Okay, det lyder lidt kompliceret, men det er det ikke! Sådan ser det ud i praksis:

  • [I orden vil bare matche ordet "Okay". Lidt meningsløst.
  • [AB] okay vil matche både "Alright" og "Blright".
  • Alr[iouxyz]ght vil matche "Alright", "Alroght", "Alrught", "Alrxght" og så videre.

Du kan kombinere tegn inden for parenteser samt bruge flere parenteser i samme linje med regulært udtryk. [AB]r[i1]gh[tuvwxyz] er et gyldigt stykke regex. Forhåbentlig ser det dog ikke helt så kaotisk ud, som det måske var for et par minutter siden!

Områder kan udvide din søgning

Den næste del af regex, der vil være nyttig med genveje, er rækkevidden. Områder giver dig mulighed for at angive en række tegn, som du vil acceptere.

I det foregående afsnit har du måske bemærket, at mine parenteser indeholdt en masse på hinanden følgende bogstaver. Den længste var [tuvwxyz]. Disse bogstaver vises i alfabetet i samme rækkefølge, lige ved siden af ​​hinanden.

Det betyder, at jeg kunne bruge et interval i stedet for at skrive dem ud. Det ville se sådan ud:

Okay[t-z]

Dette stykke regex-kode vil gøre det samme som Okay[tuvwxyz]. Det er bare pænere og nemmere at skrive.

Du kan erstatte det samme område med [a-z] hvis du ville have det til at acceptere et hvilket som helst lille bogstav fra alfabetet. Eller du kunne bruge [0-9] hvis du vil acceptere et enkeltcifret nummer.

Du kan også kombinere områder inden for samme parentes. For eksempel dette Alr[i-ux-z]ght vil acceptere "Alright", "Ok", "Alrxght" og "Alryght", men den accepterer ikke "Alraght" eller "Alrvght".

Der er andre varianter af ordet "Okay", som denne kode i øvrigt vil acceptere, og mange flere, som den ikke vil. Det er bare et kort udvalg for at holde tingene, ja, korte.

Hvis du har svært ved at forstå hvad [i-ux-z] betyder, at det kan hjælpe at se det skrevet sådan:

[i-u, x-z]

Det er ikke korrekt regex-syntaks - du bør ikke bruge et komma til at adskille områder. Men forhåbentlig hjælper det det med at give mere mening!

Du behøver ikke kommaer i regex for at adskille områder, og du behøver ikke at sætte områder lige ved siden af ​​hinanden. Du kan ændre det til [i-uabcx-z]. Dette ville acceptere de samme områder som før plus tegnene "a", "b" og "c".

Sådan udelukker du ord og tegn fra dine regex-søgninger med genveje

Ok, så nu er vi på vej et sted! Hvis du har fulgt denne artikel indtil dette punkt, bør du være i stand til at se på koden nedenfor og forstå, hvad den passer til:

Ap[p-r]le[Tt]ool[BbLF]ox

Hvis du kan læse det, så ved du, at et stykke regex-kode inkluderer en masse af mulige variationer af ordet "AppleToolBox". Så hvad nu hvis vi ville reducere antallet af varianter, den accepterer uden at ændre vores udvalg?

Det er her "ikke"-karakteren kommer ind. Det ser sådan ud: ^. Hvis du har svært ved at finde det på dit tastatur (som jeg gjorde), hold flytte og tryk på 6 tasten på dit tastatur.

For at bruge ^ tegn, skal du placere det i begyndelsen af ​​det tegn, du vil ekskludere.

Der er en fangst! Det ^ tegnet virker ikke uden for en regulært udtryksfunktion. Du kan ikke bare placere det foran bogstavet "A" for at få det til at udelukke det bogstav fra din søgning. Regex-koden ^A vil bare søge efter et stort "A".

Kombiner det i stedet med parenteser og andre regex-specialtegn.

For eksempel, hvis jeg ville søge efter en forekomst af ordet "Okay", der ikke starter med bogstavet "A", ville jeg bruge koden [^A] okay.

Du kan endda kombinere det med serier! Bare sæt det i begyndelsen af ​​din parentes, og alt inden for den parentes, inklusive intervaller, vil blive udelukket fra din søgning. Ligesom:

Hvad hvis du vil udelukke et bestemt ord fra din søgning?

Jeg havde svært ved at finde denne information. En Stack Overflow-bruger havde dog løsningen, og den ser sådan ud:

^(?!(ord)$).+$

Bare udskift ord med hvilket ord du vil udelukke fra din søgning. Ligesom:

Du kan læse det Stack Overflow-indlæg her hvis du vil lære mere om denne specifikke use case.

Jokertegn kan give dig flere søgemuligheder

Det bringer os til jokertegn. Jokertegnet, som er en periode ., bruges til at repræsentere et enkelt tegn, bar ingen. Hvis du bare skriver . som din regex-kode med genveje, vil den returnere hvert enkelt tegn i en tekst som et individuelt match.

Jeg vil selvfølgelig ikke anbefale at bruge det til det formål! I stedet anbefaler jeg at bruge det i stedet for et enkelt tegn i et ord. For eksempel, Okay vil matche "Alright", "Alrxght", "Alr

Og det er stort set det! Jokertegnet er ret let at forstå. Det matcher alt! Det gør det nyttigt at finde strenge, der matcher et bestemt format, mens de har unikke tegn.

E-mails kommer for eksempel alle til at se ret ens ud uden at være ens. Jokertegnet kan hjælpe dig med at kombinere elementer, som du ved vil være der (såsom ".com" og "@") med tegn, som du ikke kender (såsom "my_email567", iCloud eller "Gmail").

En anden interessant use case er at bruge . tegn for at finde strenge af en bestemt længde.

For eksempel, hvis jeg vil finde hver fire-tegns streng i en tekst, kunne jeg bruge ... med et mellemrum på hver side.

Og her er alle de syv-tegns strenge i den samme tekst:

Bemærk, at dette ikke er en perfekt metode til at finde strenge af en vis længde. Som du kan se i ovenstående eksempler, matches nogle strenge, som ikke burde være, og nogle, der burde være blevet ignoreret. Det er bare interessant at huske, at du kan bruge . tegn for at tælle tegn.

Husk også, at . er et specialtegn i regulært udtryk. Det betyder, at du skal tilføje en \ foran, hvis du vil søge efter perioder. Det betyder, at du skal bruge I orden\. for at matche "Okay".

Brug kvantifikatorer til at angive længden af ​​tekst, du leder efter

Okay, så du kan teknisk set bruge . tegn for at finde en streng, der fylder et bestemt antal tegn. Det meste af tiden vil du dog gerne være mere specifik.

Det er her, kvantifiers kommer ind. Kvantifikatorer giver dig mulighed for at angive længden af ​​strengen, du leder efter, når du bruger regex med genveje.

Sig for eksempel, at du vil finde et ord, der specifikt er tre bogstaver langt. For at specificere det, skal du bruge disse parenteser:

{}

Når du placerer disse beslag efter disse [] parentes, angiver du, at du vil have en streng, der matcher antallet af tegn inde i denne {} og rækken af ​​tegn specificeret i denne [].

Jeg er sikker på, at det ikke giver meget mening nu, så lad os se på et eksempel!

Lad os sige, at du vil finde et hvilket som helst årstal nævnt i en tekst. Da et år består af fire numre (åbenbart ikke hvert år fra alle tider, bare følg mig her), kan du bruge denne kode til at matche år i denne tekst:

[0-9]{4}

Denne kode siger, at vi ønsker en streng bestående af tegn fra 0 til 9, der specifikt er fire tegn lang. Du kan se, hvordan den lokaliserer denne specifikke streng i følgende skærmbillede:

Jeg skal bemærke, at der er nogle problemer med denne regex-kode, og det er, at den ikke tager højde for mellemrum eller tegnsætning. Så hvis koden finder et tal mere end fire tegn langt, som "12345678", vil den finde strengen "1234" og strengen "5678".

For at løse dette problem vil du tilføje et mellemrum til begyndelsen af ​​koden og en parentes efter {4} der indeholder et andet mellemrum, et punktum, et spørgsmålstegn, et komma og et udråbstegn. På den måde vil den overse lange rækker af tal uden at mangle rækker af tal, der har tegnsætning i deres ende i stedet for et mellemrum.

Du vil måske også bruge kvantifiers til at angive mere end én længde af streng. For eksempel vil jeg måske finde en streng på fire tegn, men også syv og elleve. Sådan vil det se ud:

[a-z]{4,7,11}

Der er et par flere kvantifikatorer, du gerne vil vide om

Ok, så der er stadig flere kvantifikatorer! Disse sidste par kvantifikatorer er til, når du vil angive længden af ​​en streng uden at være for specifik.

Sig for eksempel, at du vil finde en streng af enhver længde, som regulært udtryk kan matche. Som et navn! Navne (i vestlige lande) starter med et stort bogstav og slutter med et tilfældigt antal små bogstaver efterfulgt af et mellemrum. For at finde et navn skal du skrive følgende kode:

[A-Z][a-z]*

[A-Z] angiver, at det første tegn i strengen skal være et stort bogstav. [a-z]* angiver, at resten af ​​strengen skal bestå af små bogstaver, men det er lige meget, hvor mange bogstaver der følger. Og mellemrummet i slutningen betyder, at det vil afslutte kampen, når det finder et mellemrum i slutningen af ​​de små bogstaver.

En gylden combo i regex er .*. Det betyder at matche enhver karakter i det uendelige. Med andre ord vil det matche hele teksten som ét element.

Den næste kvantifier, du skal vide, er +. Denne er ligesom * bortset fra at den ikke matcher en streng med nul tegn. * vil matche enhver længde af streng, som inkluderer strenge, der ikke har nogen længde. +, på den anden side har brug for en streng med mindst ét ​​tegn eller flere.

Til sidst er der ? kvantifier. Det her er en mærkelig en. Det specificerer, at en streng enten er nul tegn lang eller et tegn lang. Det er det - enten ingenting eller kun en. Så hvis du bruger koden [a-z]? med et mellemrum i begyndelsen og slutningen vil den søge efter enkelte bogstaver i en tekst.

Søg efter tegn i begyndelsen og slutningen af ​​en tekststreng

Vi nærmer os slutningen af ​​vores guide til brug af regex med genveje! Der er blot yderligere to slags regex-kode, du vil bruge med genveje.

Den første er tegn, der giver dig mulighed for at matche strenge baseret på, hvordan de begynder og/eller slutter.

Når det ikke er i parentes, ^ karakterens rolle ændres fra at betyde "udelukke" til "begynder med". Det specificerer, at en streng skal begynde med, hvad du vil. For eksempel hvis du skriver ^A, der ville matche bogstavet "A" i strengene "Alright", "Apple" og "A".

Det matcher dog ikke hele ordet. Til det skal du ændre det til ^A[A-Za-z]*. Det vil matche det første ord i et afsnit/streng, så længe det ord starter med stort "A".

Som en sidebemærkning kan du skrive [A-Za-z] som [A-z]. Det betyder det samme, jeg synes bare, at det første er lidt tydeligere, når du lærer.

For at angive slutningen af ​​strengen skal du bruge $ Karakter. Det fungerer på samme måde som ^ Karakter. Den eneste forskel er, at du skriver det i slutningen af ​​en parentes/streng i stedet for begyndelsen.

For eksempel, hvis du ville finde strenge/afsnit, der slutter med "le", ville du bruge koden [A-z]*le$. Det vil matche "Tabel", "æble" og "i stand", så længe de er i slutningen af ​​en streng eller et afsnit.

Regex vil endda afvise denne match, hvis der er et mellemrum eller et tegnsætningstegn for enden af ​​strengen. "Bord." vil ikke blive matchet af denne kode.

For at rette op på det kan du medregne tegnsætning. Denne kode tager højde for forskellige former for tegnsætning og mellemrum, der kan forekomme i slutningen af ​​en streng, inklusive et tegnsætningstegn efterfulgt af et mellemrum:

[A-z]*(le[\.\?!, ]?[ ]?)$

Den kode vil matche "Able", "table", "stable" og "capable? “.

Gem tekststrenge ved hjælp af grupperingsfunktionen i regex med genveje

I orden! Du er nået til slutningen af ​​vores AppleToolBox-guide om brug af regex med genveje. Der er kun én mere regulært udtryk tilbage at lære, og det er gruppering.

Gruppering er uden tvivl den vigtigste funktion ved regex, da det er det, der giver dig mulighed for at gøre ting med den regex-kode, du skriver. Uden det er regex kun en søgefunktion. Den kan kun fortælle dig, om der findes en streng i en større tekst, dvs. den returnerer "sand" eller "falsk".

Med gruppering kan du dog gemme resultaterne af din regex-kode. Og det betyder, at du kan kopiere matches, gemme dem i variabler, erstatte dem med anden tekst, ændre deres formatering og alt andet, du ønsker at gøre med regex.

Heldigvis er gruppering super nemt! Du skal bare sætte hvad du vil gruppere i parentes (). Hvad end du sætter i parentes vil blive behandlet som en gruppe.

Hvis du sætter en hel linje med regex-kode inden for parentes, f.eks (.*@.*\..{3}), så vil den gruppe blive husket af din kode, som vil gøre det muligt at genkalde den senere i linjen.

Det er vigtigt, at du kun bruger grupper, når du har brug for det. Da de er gemt i hukommelsen, kan de få din kodes ydeevne til at falde. Gem grupper, når de er nødvendige!

Du kan også bruge grupper til organisation

Du kan også bruge grupper til at organisere din regulære udtrykskode med genveje. Når du gør dette, vil gruppen inden for parentesen ikke nødvendigvis blive husket.

Sig for eksempel, at jeg vil matche ordet "Hej", bortset fra at jeg er ligeglad med, hvad det sidste bogstav er. Det kan være et hvilket som helst lille eller stort bogstav eller endda et tal. "Hell3838djdjajaksks" og "Hej" skal tælles som kampe. “Helvede” skal derimod ikke tælles med.

For at få dette til at fungere, skriver jeg koden Helvede[A-z]|[0-9]+. Men dette er resultatet jeg får:

Grunden til, at det ikke matcher den måde, jeg forventede, er, at + anvendes kun på [0-9] beslag. Jeg har brug for det til at gælde begge beslag.

Derudover siger denne kode, at jeg vil have enten Helvede[A-z]eller[0-9]. Så det passer til ord, der starter med "Helvede" og slutter med et bogstav, eller det leder efter en række tal. Det, jeg faktisk har brug for, er, at det matcher forekomster af ordet "Helve", der ender med et bogstav eller et tal.

For at rette dette kan jeg bruge en gruppe og omskrive koden som Helvede([A-z]|[0-9])+. Nu leder den efter ordet "Helvede" efterfulgt af et hvilket som helst bogstav eller tal. Og fordi + anvendes på begge parenteser, kan det være enhver kombination af bogstaver og tal, så længe der er mindst ét ​​bogstav eller tal til stede.

Som du kan se på skærmbilledet nedenfor, løser denne gruppe mit problem uden nødvendigvis at gemme oplysningerne i den gruppe:

Hvad nu?

Og det er det! Det er næsten alt, hvad du nogensinde kunne ønske dig at vide om at bruge regex med genveje. Forhåbentlig føler du dig selvsikker nok til at begynde at eksperimentere med regex nu, selvom det ikke gav mening for dig i starten.

Nu hvor du kender det grundlæggende i regex, er du klar til at begynde at bruge det i dine genveje! Genveje accepterer regex-input i følgende handlinger:

  • Match tekst
  • Erstat tekst

Ved at bruge disse to genvejshandlinger kan du indsætte regex i dine genveje.

Par dette med genvejes automatiseringsmuligheder, og du har et ret kraftfuldt værktøj til din rådighed.

Du kan bruge regex til at gøre formatering af tekst i genveje nemmere, til at hente information fra e-mails, tekster, websteder, filer og kalenderbegivenheder, oprette tekst, der følger et specificeret format, kontrollere, at input er indtastet korrekt, og mere.

Sig for eksempel, at du vil matche e-mails. Måske skal du tjekke, at en tekststreng er en e-mail, eller måske vil du trække en e-mail(s) fra en tekst.

Hvordan ville du nedbryde dette?

Nå, du ved, at den grundlæggende struktur i en e-mail vil være en kombination af bogstaver, tal og tegn, efterfulgt af "@" symbolet, så efterfulgt af navnet på et websted som Gmail eller iCloud, som derefter efterfølges af et ".com", ".org" eller en anden form for tre-tegns topniveau domæne.

For at skrive det i regulært udtryk, skal du angive, at du vil have en streng på mindst et tegn lang, som umiddelbart følges med "@"-symbolet, derefter en anden streng på mindst ét ​​tegn, efterfulgt af et ".", derefter efterfulgt af en streng på tre tegn. Det ville se sådan ud:

[e-mailbeskyttet]+\..{3}

Hvis du indsætter dette i Match tekst eller Erstat tekst handlinger i genveje, har du en automatisering, der kan finde, gemme og manipulere en e-mailadresse.

Du kan bruge denne form for problemløsning til at komme med dine egne regex-løsninger eller til at finde nogle, som andre har lavet online!

Begynd at bruge regex med genveje for at tage din automatisering til næste niveau

Og det, venner, er virkelig det. Jeg håber, du nød at følge med i denne artikel! Dette er et af de mere ambitiøse stykker, jeg nogensinde har skrevet til AppleToolBox. Jeg var nødt til at lære mig selv regex at skrive det, og jeg håber, at jeg ved at gøre det var i stand til at hjælpe dig med at lære det.

Brug af regex med genveje er ikke anderledes end at lære at gøre noget andet på din smartphone eller computer. Bare læg lidt tid og tålmodighed, og til sidst kommer du dertil.

For flere vejledninger, tutorials og nyheder om alt, hvad Apple har, kan du tjekke resten af AppleToolBox-bloggen.

I orden [A-Z][a-z]+, vi ses næste gang!