← Kaikki työkalut

Regex-testaaja

Rakenna, testaa ja debuggaa säännöllisiä lausekkeita omaa tekstiäsi vasten suoraan selaimessa. Opi merkkiluokat, kvantifioijat, ankkurit, ryhmät ja liput.

Regex-testeri: rakenna ja debuggaa kuvioita omaa tekstiäsi vasten

Säännöllinen lauseke on pieni kieli tekstin muodon kuvaamiseen. Sen sijaan, että kysyisit "onko tämä täsmälleen tämä sana täällä?", regex antaa sinun kysyä "onko täällä merkkijonoa, joka näyttää tältä?" Juuri tämä tekee siitä tehokkaan tekstin löytämiseen, validointiin, poimintaan ja korvaamiseen koodieditoreissa, lokitiedostoissa, lomakesyötteissä ja skripteissä. Se tekee siitä myös helposti väärinymmärrettävän, koska kuvio, joka näyttää päässä toimivalta, voi hiljaa täsmätä liikaa, liian vähän tai ei mitään.

Siksi interaktiivinen testaus voittaa arvailun. Kun kirjoitat kuvion ja katsot täsmäysten syttyvän todellisessa näytetekstissä, saat välitöntä palautetta: näet mikä jäi kiinni, mikä pääsi läpi, ja mikä sieppausryhmä (capture group) tarttui mihinkin palaan. Regex-testerimme toimii kokonaan selaimessasi. Kuviosi ja näytetekstisi eivät koskaan poistu sivulta, joten voit liittää lokirivejä, sähköposteja tai tuotantodataa lähettämättä mitään palvelimelle.

Hehkuva syaani suodatin nappaamassa tiettyjä kultaisia tokeneita datavirrasta tummansinisellä pohjalla
Regex toimii kuin suodatin, poimien vain kuvioosi täsmäävät tokenit.

Rakennuspalikat, jotka kannattaa tuntea

Useimmat arkiset kuviot koostuvat pienestä joukosta palasia. Opi nämä, ja voit lukea suurimman osan luonnossa vastaan tulevista regexeistä.

Merkkiluokat kuvaavat joukon sallittuja merkkejä. [aeiou] täsmää mihin tahansa yksittäiseen vokaaliin, [0-9] täsmää yhteen numeroon, ja [a-zA-Z] täsmää yhteen kirjaimeen. Hattu hakasulkeiden sisällä kieltää joukon, joten [^0-9] tarkoittaa "mikä tahansa merkki, joka ei ole numero". Lyhenteet säästävät kirjoittamista: \d on numero, \w on sanamerkki (kirjaimet, numerot, alaviiva), \s on tyhjätila, ja piste . täsmää lähes mihin tahansa yksittäiseen merkkiin.

Kvantifikaattorit kertovat, kuinka monta kertaa edellinen osa saa toistua. * tarkoittaa nolla tai enemmän, + tarkoittaa yksi tai enemmän, ja ? tarkoittaa nolla tai yksi (valinnainen). Tarkoille määrille {3} tarkoittaa täsmälleen kolme ja {2,4} tarkoittaa kahdesta neljään. Näin \d{4} täsmää neljänumeroiseen vuoteen ja colou?r täsmää molempiin kirjoitusasuihin.

Ankkurit kiinnittävät kuvion sijaintiin merkin sijaan. ^ täsmää tekstin alkuun, $ täsmää loppuun, ja \b merkitsee sanan rajaa. Kuvio ^Error täsmää vain riveihin, jotka alkavat sanalla "Error", mikä on juuri sitä, mitä haluat lokeja selatessa.

Ryhmät kääriä osan kuviosta sulkeisiin, sekä soveltaakseen kvantifikaattoria useaan merkkiin kerralla että sieppaakseen täsmätyn tekstin myöhempää käyttöä varten. Kuviossa (\d{4})-(\d{2})-(\d{2}) jokainen ryhmä sieppaa päivämääräkomponentin, jonka voit poimia myöhemmin. Vaihtoehtoisuus (alternation) pystyviivan kanssa toimii kuin "tai": cat|dog|fish täsmää mihin tahansa kolmesta sanasta.

Kuviot, joita todella tarvitset

Muutama toistuva tehtävä kattaa suurimman osan oikeasta työstä. Napataksesi jotain sähköpostimaista, [\w.+-]+@[\w-]+\.[\w.-]+ on käytännöllinen lähtökohta; täysi sähköpostin validointi virallisen määrittelyn mukaan on tunnetusti hankalaa, ja väljä kuvio on yleensä oikea valinta ehdokkaiden korostamiseen käyttäjien hylkäämisen sijaan.

Numeroille \d+ napsii peräkkäisiä numeroita, kun taas -?\d+(\.\d+)? täsmää valinnaisiin negatiivilukuihin ja desimaaleihin. Poistaaksesi alku- ja loppupään tyhjätilan, täsmää ^\s+|\s+$ ja korvaa se tyhjällä. Löytääksesi toistetut sanat, takaisinviittauskuvio (backreference) \b(\w+)\s+\1\b täsmää sanaan, jota seuraa se itse, missä \1 viittaa takaisin ensimmäiseen sieppausryhmään.

Valitut sanat hehkuvat kultaisina ja korostuvat syaanin tekstin kaltaisten hiukkasten virrassa tummansinisellä pohjalla
Elävä korostus näyttää täsmälleen, mitkä tekstisi kohdat kuvio täsmää.

Liput muuttavat täsmäyksen käyttäytymistä

Liput (flags) ovat kytkimiä, jotka muokkaavat koko kuviota. Globaali-lippu (g) löytää jokaisen täsmäyksen sen sijaan, että pysähtyisi ensimmäiseen, mikä on sitä, mitä haluat kaikkia esiintymiä korostaessasi. Kirjainkokoa huomioimaton-lippu (i) saa kuvion error täsmäämään sekä "Error" että "ERROR" -sanoihin. Monirivinen-lippu (m) muuttaa merkkien ^ ja $ käytöstä niin, että ne täsmäävät jokaisen rivin alkuun ja loppuun, ei vain koko tekstin, mikä on välttämätöntä rivikohtaisessa lokityössä. Muita hyödyllisiä lippuja ovat s (dotall, jolloin piste täsmää myös rivinvaihtoihin) ja u täyttä Unicode-käsittelyä varten.

Murteet vaihtelevat hieman kielen mukaan

Regex on murteiden perhe, ei yksi kiinteä standardi. JavaScript, Python, PCRE (PHP), Java, .NET, Go ja Rust ovat samaa mieltä yllä olevasta ydinsyntaksista, mutta eroavat reunoilla: lookbehind-tuki, nimettyjen ryhmien syntaksi ((?<name>...) versus (?P<name>...)), Unicode-ominaisuusescapet, ja mitkä liput ovat olemassa, vaihtelevat kaikki. Kuvio, joka toimii yhdessä moottorissa, saattaa tarvita pienen muutoksen toisessa, joten kannattaa testata sitä murretta vasten, jota oikeasti käytät tuotannossa. Kun kuvio on saatu kohdalleen, muut kehittäjätyökalumme ja tekstityökalumme voivat auttaa ympäröivässä työssä juuri täsmäämäsi datan siivoamisessa, koodauksessa ja muuntamisessa.

Usein kysytyt kysymykset

Lähetetäänkö tekstini palvelimelle?

Ei. Regex-testeri toimii kokonaan selaimessasi. Kuviosi ja näytetekstisi pysyvät laitteellasi eikä niitä koskaan ladata, joten on turvallista liittää arkaluontoista dataa.

Mitä regex-murretta tämä työkalu käyttää?

Se käyttää selaimeesi sisäänrakennettua JavaScript-regex-moottoria. Ydinsyntaksi vastaa sitä, mihin olet tottunut useimmissa kielissä, vaikka jotkin edistyneet ominaisuudet eroavat hieman PCRE:stä, Pythonista tai .NETistä.

Mitä eroa on ahneella ja laiskalla täsmäyksellä?

Oletuksena kvantifikaattorit ovat ahneita ja nappaavat mahdollisimman paljon tekstiä. Kysymysmerkin lisääminen tekee niistä laiskoja, jolloin ne nappaavat mahdollisimman vähän. Esimerkiksi kuvio piste-tähti on ahne, kun taas piste-tähti-kysymysmerkki on laiska.

Miten täsmään kirjaimelliseen erikoismerkkiin?

Escapea se kenoviivalla. Täsmätäksesi todelliseen pisteeseen, kirjoita kenoviiva-piste. Sama pätee muihin metamerkkeihin, kuten sulkeisiin, hakasulkeisiin, plusmerkkiin ja kysymysmerkkiin.

Miksi kuvioni ei täsmää mihinkään?

Yleisiä syitä ovat puuttuva globaali-lippu, ankkurit jotka kiinnittävät täsmäyksen väärään kohtaan, escapaamaton erikoismerkki, tai ahneet kvantifikaattorit jotka ylittävät odottamasi rajan. Testaa pala kerrallaan löytääksesi syyllisen.

Voinko sieppa osia täsmäyksestä?

Kyllä. Kääri osa kuviosta sulkeisiin luodaksesi sieppausryhmän. Jokainen ryhmä raportoidaan erikseen, mikä antaa sinun poimia kenttiä, kuten vuoden, kuukauden ja päivän päivämäärästä.