Regular Expressions Cookbook, 2nd Edition by Jan Goyvaerts, Steven Levithan

Beperk invoer tot alfanumerieke tekens in elke taal

Deze reguliere expressie beperkt invoer tot letters en cijfers van elke taal of elk script:

^+$

Regex-opties: Geen

Regex-smaken: .NET, Java, XRegExp, PCRE, Perl, Ruby 1.9

Dit maakt gebruik van een tekenklasse die steno’s bevat voor alle codepunten in de Unicode-categorieën Letter, Teken en Decimaal getal, die de officiële Unicode-definitie van een alfanumeriek teken volgt. De categorie merktekens is opgenomen omdat merktekens voor woorden in veel talen vereist zijn. Tekens zijn codepunten die bedoeld zijn om te worden gecombineerd met andere tekens (bijvoorbeeld om een accentversie van een basisletter te vormen).

Gelukkig genoeg worden Unicode-categorieën niet ondersteund door alle reguliere expressiesmaken die in dit boek worden behandeld. In het bijzonder zal deze regex niet werken met JavaScript (tenzij je XRegExp gebruikt), Python, of Ruby 1.8’s native flavor. Het gebruik van deze regex met PCRE vereist dat PCRE is gecompileerd met UTF-8 ondersteuning, en Unicode categorieën kunnen worden gebruikt met PHP’s preg functies (die afhankelijk zijn van PCRE) als de /u optie is toegevoegd aan de regex.

De volgende regex toont een workaround voor Python:

^+$

Regex opties: Unicode

Regex flavors: Python

Hier omzeilen we het gebrek aan Unicode-categorieën in Python door de vlag UNICODE of U te gebruiken bij het maken van de reguliere expressie. Dit verandert de betekenis van sommige regex tokens door ze de Unicode karakter tabel te laten gebruiken. Met ‘\w‘ komen we een heel eind, omdat het overeenkomt met alfanumerieke tekens en de underscore. Door zijn inverse ‘\W‘ te gebruiken in een negated karakter klasse, kunnen we de underscore uit deze verzameling verwijderen. Dubbele negatieven zoals deze zijn soms heel nuttig in reguliere expressies, hoewel ze moeilijk te begrijpen kunnen zijn. Python 3.x bevat standaard niet-ASCII karakters in shorthands zoals ‘\w‘, en heeft daarom de UNICODE vlag niet nodig.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.