Beginnen met het gebruik van Regex met de Shortcuts-app

De afgelopen maand heb ik de Shortcuts- en Automator-apps op respectievelijk iOS en macOS behandeld. Beide zijn krachtpatsers als het gaat om automatisering in het Apple-ecosysteem, en te beginnen met macOS Monterey dit najaar, zal Shortcuts de automatiseringsapp zijn op alle Apple-apparaten. Dit is de reden waarom ik dit artikel wilde besteden aan het bespreken van een zeer krachtig onderwerp: regex gebruiken met de Shortcuts-app.

Hoewel ik enige achtergrond heb in informatica en programmeren, was ik op de een of andere manier nog nooit regex tegengekomen. Misschien schrikte de naam me af, of misschien was het de code, een van de minst leesbare code die ik ooit heb gezien.

Hoe het ook zij, ik besloot om verder te kijken naar regex nadat ik de Shortcuts-app de afgelopen maanden had behandeld. En wat ik ontdekte was dat veel van de beperkingen die ik tegenkwam met Shortcuts, evenals Automator, konden worden overwonnen met regex.

Met andere woorden, het was niet dat deze apps functies misten, maar dat ik geen opleiding had.

Dus in de post van vandaag gaan jij en ik samen de ins en outs van regex leren. Op die manier kunt u het meeste uit elk van deze apps halen.

We gaan de basis van regex behandelen (te beginnen met wat het is), wat je ermee kunt doen in de Shortcuts-app, sommige websites en bronnen die je kunt gebruiken als je geen zin hebt om zelf regex te leren, en dan gaan we in op de kernconcepten en mechanica van de regex taal.

Oké, laten we beginnen!

Inhoud

  • Wat zijn reguliere expressies (d.w.z. regex)?
    • Dingen die je kunt doen met regex
  • Hoe kun je regex gebruiken met de Shortcuts-app?
  • Gebruik regex101.com om uw reguliere expressies te testen
  • Als je niet wilt leren hoe je regex kunt gebruiken met de Shortcuts-app, lees dan dit
  • Regex voor beginners: begin regex te gebruiken met snelkoppelingen
    • Wat zijn regex-smaken?
    • Websites en referenties om u te helpen regex te leren met Shortcuts
    • Een eenvoudige tekstzoekopdracht uitvoeren met regex met snelkoppelingen
    • Variabele componenten toevoegen aan uw regex-zoekopdrachten
    • Bereiken kunnen uw zoekopdracht verbreden
    • Woorden en tekens uitsluiten van uw regex-zoekopdrachten met Shortcuts
    • Jokertekens kunnen u meer zoekopties geven
    • Gebruik kwantoren om de lengte van de tekst op te geven waarnaar u op zoek bent
    • Er zijn nog een paar kwantoren waarover u meer wilt weten
    • Zoeken naar tekens aan het begin en einde van een tekstreeks
    • Sla tekstreeksen op met behulp van de groeperingsfunctie van regex met Shortcuts
  • Wat nu?
    • Hoe zou je dit opsplitsen?
  • Begin regex met Shortcuts te gebruiken om uw automatisering naar een hoger niveau te tillen
    • Gerelateerde berichten:

Wat zijn reguliere expressies (d.w.z. regex)?

Een reguliere expressie, of "regex", is een stukje code dat u kunt gebruiken om naar een stuk tekst in een groter stuk tekst te zoeken.

In het geval dat u het niet weet, wordt een stuk tekst in een ander stuk tekst een "string" genoemd in de programmering. Het woord 'groen' is bijvoorbeeld een reeks tekens uit de tekst 'Ik droeg vandaag een groene broek'.

Met andere woorden, regex is een manier om een ​​reeks tekst in een grotere hoeveelheid tekst te lokaliseren. En omdat regex in code is geschreven, kun je het gebruiken om behoorlijk complexe bewerkingen uit te voeren.

Als u bijvoorbeeld naar het woord 'e-mail' wilt zoeken, kunt u eenvoudig een regex-code schrijven die naar e-mail zoekt.

Als u echter een e-mail wilt vinden die in een alinea staat en niet precies weet wat die e-mail is, moet u zoeken naar een tekstreeks die is opgemaakt als een e-mail. d.w.z. een tekenreeks die volgt op de "[e-mail beveiligd]” formaat.

Laten we nu zeggen dat u niet alleen één e-mail uit een alinea wilt vinden, maar elk e-mail. Misschien wil je ze snel ergens anders kopiëren, bijwerken naar een nieuw formaat of ze vervangen zodat ze allemaal zeggen "[e-mail beveiligd]“.

Naarmate je steeds bedrevener en ervarener wordt met regex, kun je al deze dingen en meer doen.

Dingen die je kunt doen met regex

Oké, dus misschien zijn de voorbeelden met e-mail die ik zojuist heb gegeven niet zo praktisch. Maak je geen zorgen - dat is verre van de limiet van wat je kunt bereiken met regex met de Shortcuts-app.

Over het algemeen valt alles wat regex kan doen in een van deze vier categorieën:

  1. Zoek een tekstreeks in een groter stuk tekst (d.w.z. zoeken naar een woord/tekenreeks/type tekenreeks op een pagina met tekst).
  2. Bevestig dat een tekstreeks overeenkomt met uw gewenste indeling (d.w.z. controleren of een tekstreeks met hoofdletters/ordes/interpunctietekens is geschreven).
  3. Vervang of voeg tekst in een specifiek gebied van een stuk tekst in.
  4. Splits een reeks tekst op bepaalde punten op (bijvoorbeeld een stuk tekst splitsen telkens wanneer er een komma staat).

Het niveau van diepte dat je kunt gebruiken om met elk van dit soort functies te communiceren en hoe je ze kunt combineren, maakt regex een ongelooflijk krachtig hulpmiddel voor het ontleden en manipuleren van tekst.

Hoe kun je regex gebruiken met de Shortcuts-app?

Oké, dus nu heb je hopelijk een basisidee van waar regex voor wordt gebruikt. Het is een type code dat u kunt gebruiken om naar tekst te zoeken, zelfs als u niet precies weet wat die tekst is.

Dus hoe helpt dit je in Shortcuts? Net als bij het toevoegen van scripts aan uw snelkoppelingen, is het een manier om van basisautomatiseringen te gaan (Sms me als de voordeur opengaat) naar meer geavanceerde opties (Maak automatisch een agenda-afspraak voor mijn vergaderingen telkens wanneer ik een e-mail ontvang voor een Zoom-vergadering van mijn werk).

U kunt regex met snelkoppelingen gebruiken om te controleren of een invoer correct is. Als u bijvoorbeeld een snelkoppeling maakt die alleen met URL's werkt, kunt u regex aan het begin van de snelkoppeling gebruiken om ervoor te zorgen dat de gebruiker de automatisering op een URL uitvoert.

U kunt regex combineren met scripting om krachtige snelkoppelingen te maken. Bijvoorbeeld, deze snelkoppeling gebruikt regex en scripting om een ​​streepjescode om te zetten in een URL voor uw favoriete winkel.

Wanneer je de Shortcuts-app op Mac gebruikt (komt in de herfst van 2021), kun je regex gebruiken om batchacties uit te voeren op een stuk tekst. U kunt bijvoorbeeld alle e-mails in een selectie tekst als een geordende lijst kopiëren. Of u kunt alle namen in een document vervangen door "*"-tekens om de privacy te waarborgen.

U kunt zelfs een tekst uit de ene app kopiëren, deze opnieuw formatteren zodat deze overeenkomt met de voorkeuren van een andere app en deze vervolgens in die andere app plakken, allemaal met een enkele rechtsklikactie.

Met andere woorden, regex geeft je totale controle over tekstverwerking met de Shortcuts-app. Dat klinkt in eerste instantie misschien niet erg handig, maar nu je weet dat het bestaat, zul je zeker merken hoeveel snelkoppelingen door deze functie kunnen worden verbeterd. En je zult ook merken dat veel Shortcuts niet eens mogelijk zijn zonder regex.

Gebruik regex101.com om uw reguliere expressies te testen

Zodra je regex met Shortcuts gaat gebruiken, loop je tegen een punt van frustratie aan:

Het is echt moeilijk om je regex-code te testen. En dat is niet uniek voor regex. Alles testen met de Shortcuts-app is best lastig. De enige manier om dit te doen is door de snelkoppeling uit te voeren. Die methode is niet slecht als je alleen ingebouwde Shortcuts-functies test.

Maar voor het testen van code is dit niet mogelijk om regel voor regel te controleren en biedt het niet veel feedback.

Daarvoor raad ik aan om regex101.com te gebruiken. Het is een site waar u in realtime regex-code in kunt typen. U kunt op dezelfde webpagina ook tekst in een teksteditor typen. Terwijl u ze typt, ziet u of uw regex werkt, waarom deze wel of niet werkt, en krijgt u informatie over de gevonden overeenkomsten.

regex101.com gebruikt een andere smaak van regex dan degene die wordt ondersteund door Shortcuts (daarover later meer), maar het is dichtbij genoeg om niet te veel problemen tegen te komen.

Het gebruik van deze tool is geweldig omdat je je regex daar eerst kunt schrijven en deze vervolgens naar de Shortcuts-app kunt kopiëren zodra deze werkt zoals bedoeld.

Als je niet wilt leren hoe je regex kunt gebruiken met de Shortcuts-app, lees dan dit

Ik snap het - niet iedereen zal willen leren regex te gebruiken met snelkoppelingen. Het is een vaardigheid, en dat betekent dat het tijd en oefening zal vergen. Het is lang niet zo eenvoudig als de rest van de functies voor slepen en neerzetten van de Shortcuts-app.

Geen zorgen! Hoewel je niet zoveel uit de Shortcuts-app kunt halen als iemand die de tijd neemt om regex te leren, zijn er nog steeds opties voor je beschikbaar. Er zijn namelijk sites en pagina's online waar mensen een lijst met regex-codebites hebben gemaakt die u kunt kopiëren en plakken in de Shortcuts-app.

Hier zijn enkele links die u kunt bekijken als u geen regex wilt leren:

  • 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

Lees die links gewoon door en u zou algemene regex-oplossingen moeten kunnen vinden voor snelkoppelingen die u wilt maken. Dit zal geen onderwijsvrije optie zijn, omdat het nog wat tijd kost om onder de knie te krijgen waar je naar kijkt. Maar het is een stuk eenvoudiger en een ideale oplossing voor iemand die geen tijd heeft om regex te gebruiken.

Dat gezegd hebbende, moet ik toegeven dat regex niet al te moeilijk is om te leren, vooral als je enige ervaring hebt met shell-code of beginnersprogrammering. Regex klonk in eerste instantie als wartaal, maar na een uur artikelen lezen en spelen met regex101.com, kon ik regex gaan schrijven voor mijn Shortcuts.

Het is gewoon een vertrouwd ding - als je er lang genoeg naar kijkt, ziet het er niet meer zo vreemd uit. Dus als je de tijd hebt en gewoon geïntimideerd bent, wees dan niet!

Regex voor beginners: begin regex te gebruiken met snelkoppelingen

Goed, genoeg voorwoord! Je zou een idee moeten hebben van wat regex is, wat het kan doen, waarom je het zou moeten leren, en voldoende informatie om te beslissen of je het wilt leren. Nu gaan we in op de kern van de zaak.

Er is veel inhoud hieronder, maar maak je geen zorgen! Dit artikel wordt meer een studiegids. Ik raad aan om over elke sectie te bladeren, zodat je een idee krijgt van de mechanica die regex gebruikt. Dit zou je ook moeten helpen er je hoofd omheen te wikkelen, als je nog steeds niet weet wat regex is.

Als je eenmaal dingen hebt afgeroomd, raad ik aan om regex101.com te openen en te spelen met elk van de tools in elke sectie hieronder. Zo kunt u zien hoe de concepten er in de praktijk uitzien en uw geheugen verbeteren. Nadat je dat hebt gedaan, kun je dit artikel gewoon als een referentiepunt beschouwen - iets waar je op terug kunt komen als je de bits en bobs van regex vergeet.

OK, laten we gaan!

Wat zijn regex-smaken?

Eerst gaan we kijken naar regex-smaken. Maak je geen zorgen - dit heeft geen invloed op je dagelijkse gebruik van regex met snelkoppelingen. Het is gewoon iets om je bewust van te zijn voordat je begint.

Er zijn verschillende versies van regex die bekend staan ​​als "smaken". Deze verschillende versies lijken nog steeds erg op elkaar. Als je één smaak kunt leren lezen en schrijven, moet je ze allemaal kunnen lezen. Er zullen slechts kleine verschillen zijn in hoe uw regex-code moet worden opgemaakt.

Bij het programmeren staan ​​deze opmaakspecificaties bekend als "syntaxis". Het is gewoon de manier waarop u uw code moet schrijven om die code te laten begrijpen door de app waarin u deze schrijft.

Dit is waarom syntaxis van belang is

"Hé vriend, hoe gaat je dag?"

“, gaat vriend? je hey dag hoe"

Beide zinnen hebben dezelfde woorden, tekens en spaties. Slechts één is echter logisch, en dat komt omdat het de conventionele syntaxis volgt.

Bij het coderen kan de ene programmeertaal de eerste versie begrijpen, maar de tweede niet. Voor een andere programmeertaal kan de tweede echter volkomen logisch zijn, terwijl de eerste op wartaal lijkt. Voor iemand die Engels spreekt, begrijp je waarschijnlijk de bedoeling van beide regels, ook al kost het wat moeite om de betekenis ervan te begrijpen.

Dat is (een soort van) hoe de verschillende smaken van regex zijn. Ze zullen er allemaal een beetje anders uitzien en een beetje op jou lijken. Maar je moet de juiste smaak gebruiken voor de app die je gebruikt, anders heeft die app geen idee wat je hebt geschreven.

De Shortcuts-app begrijpt de ICU-smaak van regex, dus dat is de smaak die u wilt gebruiken. De site regex101.com heeft een paar verschillende smaken waaruit u aan de linkerkant van de pagina kunt kiezen. Het gebruikt echter wel PCRE, wat behoorlijk lijkt op ICU.

Het is belangrijk om te weten dat er verschillende smaken regex zijn, want je zult ongetwijfeld verschillende smaken online tegenkomen. Als je een stukje regex vindt dat je wilt stelen, maar het niet kunt laten werken met Shortcuts, of het ziet er gewoon niet goed uit, controleer dan in welke smaak het is geschreven!

Websites en referenties om u te helpen regex te leren met Shortcuts

Een ander ding dat ik wil bespreken voordat we beginnen met het verkennen van de feitelijke mechanica van het schrijven van regex, zijn bronnen. Ik beweer in geen geval dat dit bericht een uitputtende bron is over het leren van regex. Het is alleen bedoeld als een handig startpunt voor diegenen die regex willen gebruiken met snelkoppelingen.

Als je dieper in regex wilt duiken of het gevoel hebt dat dit artikel je niet de hulp geeft die je nodig hebt, kun je enkele van deze artikelen, handleidingen en hulpmiddelen bekijken:

  • https://regex101.com – Een website waarmee u uw regex-code in realtime kunt testen.
  • https://www.shortcutfoo.com/app/dojos/regex/cheatsheet - Een spiekbriefje voor als je vergeet wat elk personage doet
  • http://www.rexegg.com – Deze website is een uitgebreide bron om alles te leren wat u moet weten over regex. Bekijk deze eens als je vaardig wilt worden met regex.
  • https://scottwillsey.com/blog/ios/regex1/ – Dit is een vierdelige blogserie over het gebruik van regex met Shortcuts. Ik neem een ​​heel andere benadering dan deze gids, dus het zou een mooie begeleidende serie voor dit artikel moeten zijn.
  • Stack Overflow en Reddit zijn beide goede websites om je regex-vragen en voortgang te delen om advies en antwoorden te krijgen.

Deze bronnen verschillen van de bronnen die worden vermeld in de Als je niet wilt leren hoe je regex kunt gebruiken met de Shortcuts-app sectie omdat ze allemaal vereisen dat je daadwerkelijk begint met het leren van regex. Ze zijn uitgebreider, terwijl de andere slechts referentiepunten zijn.

Een eenvoudige tekstzoekopdracht uitvoeren met regex met snelkoppelingen

Akkoord! We zijn nu op het punt waar iedereen op heeft gewacht: we gaan de basis leren van het gebruik van regex met snelkoppelingen.

Laten we beginnen met een eenvoudige zoekopdracht, want dit is het eenvoudigste wat u met regex kunt doen. Zoals eerder vermeld, raad ik aan om regex101.com op een ander tabblad te openen, zodat u kunt volgen.

In de basis zoekt regex naar (of bij elkaar passen) wat u er ook in typt. Als ik bijvoorbeeld zou typen Akkoord als mijn regex-code zou het elke instantie van het woord "Ok" in deze handleiding vinden.

Hoofdletters, spaties en interpunctie zijn belangrijk. Dat betekent dat Akkoord, oke, Akkoord!, en Akkoord , zullen allemaal verschillende resultaten opleveren.

En dat is het! Telkens wanneer je iets typt in een regex-zoekopdracht zonder speciale tekens te gebruiken, zal regex alles matchen dat exact overeenkomt met wat je ook hebt getypt.

Er is één vangst! Sommige tekens op uw toetsenbord zijn ook speciale regex-tekens. Dat betekent dat ze een soort functie vervullen in regex-code.

De ? symbool is zo'n karakter. Het wordt in regex-code gebruikt als een kwantificator. Dus als u probeert te zoeken naar "Oké?" door te typen Akkoord? als je regex-code, krijg je niet wat je wilt.

Om dit op te lossen, moet u specificeren dat u "?" als een tekenreeks, niet als een speciaal teken. Om dat voor dit personage of een ander te doen, voeg je gewoon een toe \ symbool vlak voor het teken waarvan u de speciale eigenschappen wilt opheffen.

Dus als u wilt zoeken naar "Oké?" met regex ziet uw code er als volgt uit:

Akkoord\?

Als je niet zeker weet of een specifiek teken door regex als een speciaal teken wordt behandeld, kun je het volgende controleren: deze spiekbrief voor alle speciale tekens in regex.

Zoek naar meer dan één woord met het teken "of"

Een ander belangrijk onderdeel van het zoeken naar strings met regex is het gebruik van de functie "of". Dit is een teken dat je tussen twee woorden/tekens kunt plaatsen om te zeggen: "Overeenkomen met dit of dit."

Als ik bijvoorbeeld in een hele tekst wil zoeken naar het woord "alright" en "alright", zou ik de | karakter. Zoals zo:

Oke|oke

Als je het moeilijk vindt om de | karakter, houd de verschuiving toets omlaag en druk op de \ toets. Het is boven de opbrengst toets op de meeste toetsenborden.

Variabele componenten toevoegen aan uw regex-zoekopdrachten

Oké, dus nu je weet hoe een neutrale regex is, is het tijd om je eerste speciale personage op te pakken. Dat zouden de vierkante haken zijn, dat zijn deze dingen [].

Wat u ook tussen deze haakjes plaatst, het wordt beschouwd als een variabel onderdeel van uw regex-zoekopdracht. U kunt zoveel tekens tussen haakjes plaatsen als u wilt, maar er is er maar één geldig per wedstrijd.

Oké, dat klinkt een beetje ingewikkeld, maar dat is het niet! Zo ziet het er in de praktijk uit:

  • [Akkoord komt gewoon overeen met het woord "Ok". Beetje zinloos.
  • [AB]goed komt overeen met zowel "Ok" als "Blright".
  • Alr[iouxyz]ght komt overeen met "Alright", "Alroght", "Alrught", "Alrxght", enzovoort.

U kunt tekens tussen haakjes combineren en meerdere haakjes gebruiken in dezelfde regel regex. [AB]r[i1]gh[tuvwxyz] is een geldig stuk regex. Hopelijk ziet het er echter niet zo chaotisch uit als een paar minuten geleden!

Bereiken kunnen uw zoekopdracht verbreden

Het volgende stukje regex dat handig zal zijn met Shortcuts is het bereik. Met bereiken kunt u een reeks tekens opgeven die u accepteert.

In het vorige gedeelte is het je misschien opgevallen dat mijn haakjes veel opeenvolgende letters bevatten. De langste was [tuvwxyz]. Die letters verschijnen in dezelfde volgorde in het alfabet, vlak naast elkaar.

Dat betekent dat ik een bereik kan gebruiken in plaats van ze uit te typen. Dat zou er als volgt uitzien:

Oke[t-z]

Dit stukje regex-code doet hetzelfde als: Oke[tuvwxyz]. Het is gewoon netter en gemakkelijker om te schrijven.

Je zou datzelfde bereik kunnen vervangen door: [a-z] als je wilt dat het elke kleine letter van het alfabet accepteert. Of je zou kunnen gebruiken [0-9] als u een enkelcijferig nummer wilt accepteren.

U kunt ook bereiken binnen dezelfde beugel combineren. Dit is bijvoorbeeld Alr[i-ux-z]ght accepteert "Alright", "Alroght", "Alrxght" en "Alryght", maar het accepteert geen "Alraght" of "Alrvght".

Er zijn trouwens andere variaties van het woord "Ok" die deze code zal accepteren, en nog veel meer die het niet zal accepteren. Dat is slechts een korte selectie om dingen, nou ja, kort te houden.

Als je het moeilijk vindt om te begrijpen wat? [i-ux-z] betekent, kan het helpen om het als volgt te zien:

[ik-u, x-z]

Dat is geen correcte regex-syntaxis - u moet geen komma gebruiken om bereiken te scheiden. Maar hopelijk helpt dat om het logischer te maken!

U hebt geen komma's in regex nodig om bereiken te scheiden en u hoeft bereiken niet naast elkaar te plaatsen. Je zou het kunnen veranderen in [i-uabcx-z]. Dit zou dezelfde bereiken accepteren als voorheen plus de tekens "a", "b" en "c".

Woorden en tekens uitsluiten van uw regex-zoekopdrachten met Shortcuts

Ok, dus nu komen we ergens! Als je dit artikel tot nu toe hebt gevolgd, zou je de onderstaande code moeten kunnen bekijken en begrijpen waarvoor deze overeenkomt:

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

Als je het kunt lezen, dan weet je dat dat stukje regex-code bevat: heel veel van mogelijke variaties van het woord "AppleToolBox". Dus wat als we het aantal variaties dat het accepteert willen verminderen zonder ons assortiment te wijzigen?

Dat is waar het "niet" -teken binnenkomt. Het ziet er zo uit: ^. Als je het moeilijk vindt om het op je toetsenbord te vinden (zoals ik deed), houd dan verschuiving en druk op de 6 toets op uw toetsenbord.

om de te gebruiken ^ teken plaatst, plaatst u deze aan het begin van het teken dat u wilt uitsluiten.

Er is een vangst! De ^ karakter werkt niet buiten een regex-functie. U kunt het niet zomaar voor de letter "A" plaatsen om die letter uit uw zoekopdracht te laten uitsluiten. De regex-code ^A zal gewoon zoeken naar een hoofdletter "A".

Combineer het in plaats daarvan met haakjes en andere speciale regex-tekens.

Als ik bijvoorbeeld zou willen zoeken naar een instantie van het woord "Ok" dat niet begint met de letter "A", zou ik de code gebruiken [^A]oke.

Je kunt het zelfs combineren met assortimenten! Zet het gewoon aan het begin van uw haakje en alles binnen dat haakje, inclusief bereiken, wordt uitgesloten van uw zoekopdracht. Zoals zo:

Wat als u een specifiek woord wilt uitsluiten van uw zoekopdracht?

Ik had moeite om deze informatie te vinden. Een Stack Overflow-gebruiker had echter de oplossing en die ziet er als volgt uit:

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

Gewoon vervangen woord met welk woord u ook wilt uitsluiten van uw zoekopdracht. Zoals zo:

Je kunt die Stack Overflow-post lezen hier als u meer wilt weten over deze specifieke use-case.

Jokertekens kunnen u meer zoekopties geven

Dat brengt ons bij wildcards. Het jokerteken, dat een punt is ., wordt gebruikt om een ​​enkel teken weer te geven, uitgezonderd. Als je gewoon typt . als uw regex-code met snelkoppelingen, retourneert het elk afzonderlijk teken in een tekst als een individuele overeenkomst.

Ik zou het natuurlijk niet aanraden om het voor dat doel te gebruiken! In plaats daarvan raad ik aan het te gebruiken in plaats van een enkel teken in een woord. Bijvoorbeeld, Oke komt overeen met "Alright", "Alrxght", "Alr

En dat is het zo'n beetje! Het jokerteken is vrij eenvoudig te begrijpen. Het past bij alles! Dat maakt het handig voor het vinden van tekenreeksen die overeenkomen met een specifiek formaat terwijl ze unieke tekens hebben.

E-mails zullen er bijvoorbeeld allemaal ongeveer hetzelfde uitzien zonder hetzelfde te zijn. Het jokerteken kan u helpen om elementen waarvan u weet dat ze er zullen zijn (zoals ".com" en "@") te combineren met tekens die u niet kent (zoals "my_email567", iCloud of "Gmail").

Een andere interessante use-case is het gebruik van de . teken om strings van een bepaalde lengte te vinden.

Als ik bijvoorbeeld elke tekenreeks van vier tekens in een tekstlichaam wil vinden, zou ik kunnen gebruiken ... met aan weerszijden een spatie.

En hier zijn alle strings van zeven tekens in diezelfde tekst:

Merk op dat dit geen perfecte methode is om strings van een bepaalde lengte te vinden. Zoals je in de bovenstaande voorbeelden kunt zien, komen sommige strings overeen die dat niet zouden moeten zijn, en andere die genegeerd hadden moeten worden. Het is gewoon interessant om te onthouden dat je de. kunt gebruiken . karakter om karakters te tellen.

Houd er ook rekening mee dat de . is een speciaal teken in regex. Dat betekent dat je een. moet toevoegen \ ervoor als u naar perioden wilt zoeken. Dat betekent dat je zou moeten gebruiken Akkoord\. overeenkomen met "Ok".

Gebruik kwantoren om de lengte van de tekst op te geven waarnaar u op zoek bent

Oké, dus je kunt technisch de . teken om een ​​tekenreeks te vinden die een bepaald aantal tekens in beslag neemt. Meestal wil je echter specifieker zijn.

Dat is waar kwantificatoren binnenkomen. Met Quantifiers kun je de lengte van de string specificeren die je zoekt bij het gebruik van regex met Shortcuts.

Stel bijvoorbeeld dat u een woord wilt vinden dat specifiek drie letters lang is. Om dat te specificeren, wil je deze haakjes gebruiken:

{}

Wanneer u deze haakjes na deze plaatst [] haakjes, u geeft aan dat u een tekenreeks wilt die overeenkomt met het aantal tekens hierin {} en het bereik van tekens dat hierin wordt gespecificeerd [].

Ik weet zeker dat dat nu niet veel zin heeft, dus laten we naar een voorbeeld kijken!

Stel dat u alle jaren wilt vinden die in een tekst worden genoemd. Aangezien een jaar uit vier cijfers bestaat (natuurlijk niet elk jaar van alle tijden, volg me gewoon hier), kunt u deze code gebruiken om jaren binnen die tekst te matchen:

[0-9]{4}

Deze code zegt dat we een tekenreeks willen die bestaat uit tekens van 0 tot en met 9, die specifiek vier tekens lang is. U kunt zien hoe het deze specifieke tekenreeks lokaliseert in de volgende schermafbeelding:

Ik moet er rekening mee houden dat er enkele problemen zijn met deze regex-code, en dat is dat er geen rekening wordt gehouden met spaties of interpunctie. Dus als de code een getal vindt dat meer dan vier tekens lang is, zoals "12345678", zal het de tekenreeks "1234" en de tekenreeks "5678" vinden.

Om dit probleem op te lossen, zou je een spatie willen toevoegen aan het begin van de code en een haakje na de {4} die een andere spatie, een punt, een vraagteken, een komma en een uitroepteken bevat. Op die manier worden lange reeksen cijfers over het hoofd gezien zonder reeksen cijfers te missen die aan het einde leestekens hebben in plaats van een spatie.

U kunt ook kwantoren gebruiken om meer dan één stringlengte op te geven. Misschien wil ik bijvoorbeeld een string van vier karakters lang vinden, maar ook zeven en elf. Hier is hoe dat eruit zou zien:

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

Er zijn nog een paar kwantoren waarover u meer wilt weten

Ok, er zijn dus nog meer kwantoren! Deze laatste paar kwantoren zijn voor wanneer je de lengte van een string wilt specificeren zonder al te specifiek te zijn.

Stel bijvoorbeeld dat u een string wilt vinden van elke lengte die regex kan evenaren. Zoals een naam! Namen (in westerse landen) beginnen met één hoofdletter en eindigen met een willekeurig aantal kleine letters, gevolgd door een spatie. Om een ​​naam te vinden, zou u de volgende code moeten schrijven:

[A-Z][a-z]*

[A-Z] geeft aan dat het eerste teken van de tekenreeks een hoofdletter moet zijn. [a-z]* geeft aan dat de rest van de tekenreeks moet bestaan ​​uit kleine letters, maar het maakt niet uit hoeveel letters er volgen. En de spatie aan het einde betekent dat het de wedstrijd zal beëindigen zodra het een spatie aan het einde van de kleine letters vindt.

Een gouden combo in regex is .*. Dat betekent dat je oneindig veel karakters kunt matchen. Met andere woorden, het komt overeen met de hele tekst als één item.

De volgende kwantor die u moet weten, is +. Deze is net als * behalve dat het niet overeenkomt met een tekenreeks met nul tekens. * komt overeen met elke lengte van de tekenreeks, inclusief tekenreeksen die geen lengte hebben. +, aan de andere kant, heeft een tekenreeks nodig met ten minste één teken of meer.

Als laatste is er de ? kwantificeerder. Dit is een vreemde. Het specificeert dat een tekenreeks ofwel nul tekens lang is of één teken lang. Dat is het - niets of slechts één. Dus als je de code gebruikt [a-z]? met een spatie aan het begin en einde, zoekt het naar enkele letters in een tekst.

Zoeken naar tekens aan het begin en einde van een tekstreeks

We naderen het einde van onze gids over het gebruik van regex met snelkoppelingen! Er zijn nog maar twee soorten regex-code die u met snelkoppelingen zult gebruiken.

De eerste zijn tekens waarmee u tekenreeksen kunt matchen op basis van hoe ze beginnen en/of eindigen.

Als het niet tussen haakjes staat, is de ^ de rol van het personage verandert van de betekenis van "uitsluiten" in "begint met". Het specificeert dat een string moet beginnen met wat je maar wilt. Als je bijvoorbeeld schrijft: ^A, dat zou overeenkomen met de letter "A" in de tekenreeksen "Alright", "Apple" en "A".

Het komt echter niet overeen met het hele woord. Daarvoor zou je het moeten veranderen in ^A[A-Za-z]*. Dat komt overeen met het eerste woord van een alinea/tekenreeks, zolang dat woord maar met een hoofdletter "A" begint.

Als een kanttekening, je kunt schrijven [A-Za-z] als [A-z]. Het betekent hetzelfde, ik vind alleen dat de eerste een beetje duidelijker is als je aan het leren bent.

Om het einde van de string te specificeren, gebruik je de $ karakter. Het werkt hetzelfde als de ^ karakter. Het enige verschil is dat je het aan het einde van een haakje/tekenreeks schrijft in plaats van aan het begin.

Als u bijvoorbeeld strings/paragrafen wilt vinden die eindigen op "le", dan gebruikt u de code [A-z]*le$. Dat komt overeen met "Tabel", "appel" en "geschikt", zolang ze aan het einde van een tekenreeks of alinea staan.

Regex zal deze overeenkomst zelfs weigeren als er een spatie of leesteken aan het einde van de string staat. "Tafel." wordt niet geëvenaard door deze code.

Om dat op te lossen, kunt u interpunctie gebruiken. Deze code houdt rekening met verschillende vormen van interpunctie en spatiëring die aan het einde van een tekenreeks kunnen voorkomen, inclusief een leesteken gevolgd door een spatie:

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

Die code komt overeen met 'Able', 'table', 'stable' en 'capable? “.

Sla tekstreeksen op met behulp van de groeperingsfunctie van regex met Shortcuts

Akkoord! U bent aan het einde gekomen van onze AppleToolBox-handleiding over het gebruik van regex met snelkoppelingen. Er is nog maar één regex-functie om te leren, en dat is groeperen.

Groeperen is misschien wel het belangrijkste kenmerk van regex, omdat je hiermee dingen kunt doen met de regex-code die je schrijft. Zonder dit is regex slechts een zoekfunctie. Het kan je alleen vertellen of een string bestaat binnen een grotere tekst, d.w.z. het zal "true" of "false" retourneren.

Met groeperen kunt u echter de resultaten van uw regex-code opslaan. En dat betekent dat je overeenkomsten kunt kopiëren, ze in variabelen kunt opslaan, ze kunt vervangen door andere tekst, hun opmaak kunt wijzigen en al het andere dat je met regex zou willen doen.

Gelukkig is groeperen super eenvoudig! Zet gewoon wat je wilt groeperen tussen haakjes (). Wat u tussen haakjes plaatst, wordt als een groep behandeld.

Als je een hele regel regex-code tussen haakjes plaatst, zoals (.*@.*\..{3}), dan wordt die groep onthouden door uw code, waardoor deze later kan worden opgeroepen.

Het is belangrijk dat u groepen alleen gebruikt wanneer dat nodig is. Omdat ze in het geheugen worden opgeslagen, kunnen ze ervoor zorgen dat de prestaties van uw code afnemen. Bewaar groepen voor wanneer ze nodig zijn!

U kunt groepen ook gebruiken voor organisatie

Je kunt ook groepen gebruiken om je regex-code te ordenen met Shortcuts. Wanneer u dit doet, wordt de groep tussen haakjes niet noodzakelijk onthouden.

Stel bijvoorbeeld dat ik het woord "Hallo" wil matchen, behalve dat het me niet kan schelen wat de laatste letter is. Het kan elke kleine letter of hoofdletter zijn of zelfs een cijfer. "Hell3838djdjajaksks" en "Hallo" moeten als overeenkomsten worden geteld. "De hel", aan de andere kant, moet niet worden meegeteld.

Om dit te laten werken, schrijf ik de code Hell[A-z]|[0-9]+. Maar dit is het resultaat dat ik krijg:

De reden dat het niet overeenkomt met de manier waarop ik had verwacht, is dat de + wordt alleen toegepast op de [0-9] haakje. Ik heb het nodig om op beide beugels van toepassing te zijn.

Bovendien zegt deze code dat ik een van beide wil Hel [A-z]of[0-9]. Het komt dus overeen met woorden die beginnen met "Hell" en eindigen met een letter, of het zoekt naar reeksen getallen. Wat ik eigenlijk nodig heb, is dat het overeenkomt met instanties van het woord "Hell" die eindigen op een letter of een cijfer.

Om dit op te lossen, kan ik een groep gebruiken en de code herschrijven als: Hel([A-z]|[0-9])+. Nu zoekt het naar het woord "Hell" gevolgd door een letter of cijfer. En omdat de + wordt toegepast op beide haakjes, het kan elke combinatie van letters en cijfers zijn, zolang er tenminste één letter of cijfer aanwezig is.

Zoals je kunt zien in de onderstaande schermafbeelding, lost deze groep mijn probleem op zonder noodzakelijkerwijs de informatie binnen die groep op te slaan:

Wat nu?

En dat is het! Dat is bijna alles wat u ooit zou willen weten over het gebruik van regex met snelkoppelingen. Hopelijk voel je je zelfverzekerd genoeg om nu met regex te gaan experimenteren, zelfs als het in eerste instantie niet logisch voor je was.

Nu je de basis van regex kent, ben je klaar om het in je Shortcuts te gaan gebruiken! Snelkoppelingen accepteert regex-invoer in de volgende acties:

  • Match tekst
  • Tekst vervangen

Met behulp van deze twee acties voor snelkoppelingen kunt u regex invoegen in uw snelkoppelingen.

Combineer dit met de automatiseringsmogelijkheden van Shortcuts en je hebt een behoorlijk krachtige tool tot je beschikking.

U kunt regex gebruiken om het opmaken van tekst in Shortcuts eenvoudiger te maken, om informatie uit e-mails, teksten, websites, bestanden en agendagebeurtenissen, tekst maken die een gespecificeerd formaat volgt, controleren of de invoer correct is ingevoerd, en meer.

Stel bijvoorbeeld dat u wilt matchen voor e-mails. Misschien moet je controleren of een tekstreeks een e-mail is, of misschien wil je een e-mail (s) uit een tekstblok halen.

Hoe zou je dit opsplitsen?

Welnu, u weet dat de basisstructuur van een e-mail een combinatie van letters, cijfers en tekens zal zijn, gevolgd door het "@" -symbool, dan gevolgd door de naam van een website zoals Gmail of iCloud, gevolgd door een ".com", ".org" of een ander soort van drie tekens op het hoogste niveau domein.

Om dat in regex te schrijven, moet je specificeren dat je een tekenreeks van ten minste één teken lang wilt die onmiddellijk wordt gevolgd door het "@"-symbool, dan nog een reeks van ten minste één teken, gevolgd door een ".", gevolgd door een reeks van drie karakters. Dat zou er als volgt uitzien:

[e-mail beveiligd]+\..{3}

Als je dit in de plakt Match tekst of Tekst vervangen acties in Shortcuts, heb je een automatisering die een e-mailadres kan vinden, opslaan en manipuleren.

Je kunt dit soort probleemoplossing gebruiken om je eigen regex-oplossingen te bedenken of om er een te vinden die anderen online hebben gemaakt!

Begin regex met Shortcuts te gebruiken om uw automatisering naar een hoger niveau te tillen

En dat, vrienden, is het echt. Ik hoop dat je het leuk vond om dit artikel te volgen! Dit is een van de meer ambitieuze stukken die ik ooit voor AppleToolBox heb geschreven. Ik moest mezelf regex leren om het te schrijven, en ik hoop dat ik je daarbij heb kunnen helpen het te leren.

Regex gebruiken met snelkoppelingen is niet anders dan leren hoe u iets anders kunt doen op uw smartphone of computer. Stop er gewoon wat tijd en geduld in en uiteindelijk kom je er wel.

Voor meer handleidingen, tutorials en nieuws over alles wat met Apple te maken heeft, bekijk de rest van de AppleToolBox-blog.

Akkoord [A-Z][a-z]+, ik zie je de volgende keer!