Forge
markdowne8ad0934
1<!-- kb_card
2id: kb-regex-unicode-boundaries-v1
3title: Regex — Unicode-свойства и границы (L1)
4cluster: regex-friedl-mre3
5kb_layer: L1
6book_alignment: Расширенные классы и границы в духе разделов про Unicode и «настоящие» символы.
7last_reviewed_utc: 2026-03-21
8-->
9
10# Regex: Unicode и границы (L1)
11
12## Назначение
13
14Снять типичные ложные срабатывания: «латиница работает, кириллица ломается», «\b режет середину слова», суррогатные пары в UTF-16.
15
16## Unicode property classes (где есть `\p`)
17
18- `\p{L}` — буквы; `\p{N}` — числа; `\p{P}` — пунктуация; точные имена категорий см. в спецификации Unicode и доке движка.
19- `\P{...}` — отрицание свойства.
20
21**Важно:** без Unicode-режима (`(?u)`, флаги API) `\w` и `\b` могут остаться «ASCII-ориентированными».
22
23## Граница слова `\b`
24
25- Зависит от определения `\w` в данном режиме.
26- Для многоязычного текста проверяй поведение на **реальных** словах и знаках препинания.
27
28## UTF-16 и «символ»
29
30- В средах с UTF-16 (C#, JS строки) один **визуальный** графемный кластер может кодироваться несколькими кодовыми единицами; `.` и `\X` (PCRE) ведут себя по-разному.
31
32**Правило:** для пользовательского текста с эмодзи и комбинирующими знаками regex — часто недостаточен; нужна нормализация (NFC/NFD) или специализированная обработка.
33
34## Связи
35
36- `kb-regex-syntax-features-v1.md`
37- `kb-regex-flavors-practice-v1.md`
38- `regex-playbook.md`
39
40<!-- section:dotnet-unicode-hint -->
41**.NET:** `RegexOptions.ECMAScript` меняет семантику ряда конструкций; для Unicode-категорий обычно нужен стандартный .NET-режим без урезания до ECMAScript.
42<!-- /section:dotnet-unicode-hint -->
43
44
View only · write via MCP/CIDE