Säännöllisten lausekkeiden keittokirja, 2. painos by Jan Goyvaerts, Steven Levithan

Rajoita syötteen syöttö aakkosnumeerisiin merkkeihin millä tahansa kielellä

Tämä säännöllinen lauseke rajoittaa syötteen syötteen kirjaimiin ja numeroin millä tahansa kielellä tai missä tahansa käsikirjoituksessa:

^+$

Regex-asetukset: None

Regex flavors: .NET, Java, XRegExp, PCRE, Perl, Ruby 1.9

Tämä käyttää merkkiluokkaa, joka sisältää lyhenteet kaikille Unicoden kirjain-, merkki- ja desimaaliluku-luokkiin kuuluville koodipisteille, mikä noudattaa virallista Unicode-määritelmää aakkosnumeerisesta merkistä. Merkkiluokka on mukana, koska merkkejä tarvitaan monien kielten sanoissa. Merkit ovat koodipisteitä, jotka on tarkoitettu yhdistettäväksi muihin merkkeihin (esimerkiksi muodostamaan aksentoitu versio peruskirjaimesta).

Valitettavasti kaikki tässä kirjassa käsitellyt säännölliset lausekkeet eivät tue Unicode-kategorioita. Erityisesti tämä regex ei toimi JavaScriptin (ellei käytä XRegExpiä), Pythonin tai Ruby 1.8:n natiivin version kanssa. Tämän regexin käyttäminen PCRE:n kanssa edellyttää, että PCRE on käännetty UTF-8-tuella, ja Unicode-luokkia voidaan käyttää PHP:n preg-funktioiden kanssa (jotka tukeutuvat PCRE:hen), jos regexiin liitetään /u-vaihtoehto.

Seuraavassa regexissä on esitetty kiertoratkaisu Pythonille:

^+$

Regexin vaihtoehdot: Unicode

Regex flavors: Python

Tässä ohitamme Unicode-luokkien puuttumisen Pythonissa käyttämällä UNICODE– tai U-lippua säännöllistä lauseketta luotaessa. Tämä muuttaa joidenkin regex-merkkien merkitystä siten, että ne käyttävät Unicode-merkistötaulukkoa. ’\w’ johtaa meidät tällöin suurimmaksi osaksi ratkaisuun, koska se vastaa aakkosnumeerisia merkkejä ja alaviivaa. Käyttämällä sen käänteislukua ’\W’ kielletyssä merkkiluokassa voimme poistaa alaviivan tästä joukosta. Tällaiset kaksoisnegatiivit ovat toisinaan varsin hyödyllisiä säännöllisissä lausekkeissa, vaikka niitä voi olla vaikea ymmärtää. Python 3.x sisältää oletusarvoisesti ei-ASCII-merkit lyhenteissä kuten ’\w’, eikä siksi tarvitse UNICODE-lippua.

Vastaa

Sähköpostiosoitettasi ei julkaista.