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

Ogranicz dane wejściowe do znaków alfanumerycznych w dowolnym języku

To wyrażenie regularne ogranicza dane wejściowe do liter i cyfr z dowolnego języka lub skryptu:

^+$

Opcje Regex: Brak

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

Używa klasy znaków, która zawiera skróty dla wszystkich punktów kodowych w kategoriach Unicode Letter, Mark i Decimal Number, co jest zgodne z oficjalną definicją Unicode znaku alfanumerycznego. Kategoria Znak jest uwzględniona, ponieważ znaki są wymagane dla słów w wielu językach. Znaki są punktami kodowymi, które mają być łączone z innymi znakami (na przykład, aby utworzyć akcentowaną wersję litery podstawowej).

Niestety, kategorie Unicode nie są obsługiwane przez wszystkie smaki wyrażeń regularnych omówione w tej książce. Konkretnie, ten regex nie będzie działał z JavaScriptem (chyba że użyjemy XRegExp), Pythonem lub natywnym smakiem Ruby 1.8. Użycie tego regexu z PCRE wymaga, aby PCRE było skompilowane z obsługą UTF-8, a kategorie Unicode mogą być użyte z funkcjami PHP preg (które polegają na PCRE), jeśli do regexu zostanie dołączona opcja /u.

Poniższy regex pokazuje obejście dla Pythona:

^+$

Opcje regexu: Unicode

Smaki Regex: Python

Obchodzimy tutaj brak kategorii Unicode w Pythonie poprzez użycie flagi UNICODE lub U podczas tworzenia wyrażenia regularnego. Zmienia to znaczenie niektórych tokenów regex, sprawiając, że korzystają one z tablicy znaków Unicode. \w’ prowadzi nas przez większość drogi do rozwiązania, ponieważ pasuje do znaków alfanumerycznych i podkreślenia. Przez użycie jego odwrotności ’\W’ w zanegowanej klasie znaków, możemy usunąć podkreślenie z tego zestawu. Podwójne negacje, takie jak ta, są czasami całkiem przydatne w wyrażeniach regularnych, choć mogą być trudne do ogarnięcia. Python 3.x domyślnie zawiera znaki nieASCII w skrótach takich jak ’\w’ i dlatego nie wymaga flagi UNICODE.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.