RegEx
Компиляция PCRE2-шаблона, поиск и замена в тексте.
Сначала Compile и проверка Error.Ok, затем Search/SearchAll/Sub. Для многократного поиска переиспользуйте успешно скомпилированный объект. CreateFromString удобнее, но всё равно требует проверки IsValid.
Шаблон проходит два уровня: строковый литерал C# и синтаксис PCRE2. Например, @"\d+" и "\\d+" передают одинаковый шаблон. Не считайте результат онлайн-проверки на другом regex-движке гарантией эквивалентности.
Пример находит первую последовательность ASCII-цифр и получает её по имени группы. Он корректно извлекает текст после emoji и кириллицы, не подставляя нативный индекс в C# Substring.
using Reckfell;
public static class RegExTextExample
{
public static bool TryFindNumber(string text, out string number)
{
number = "";
using var expression = new RegEx();
if (expression.Compile(@"(?<number>[0-9]+)") != Error.Ok)
return false;
using var match = expression.Search(text);
if (match is null)
return false;
number = match.GetString("number");
return true;
}
}Позиции RegEx измеряются в нативных 32-битных единицах строки. Для корректного Unicode это кодовые точки; C# использует UTF-16, а видимые графемы могут состоять из нескольких точек. Эти индексы нельзя смешивать напрямую. API не предоставляет параметр таймаута поиска; успешная компиляция не обещает ограниченное время на любом входе.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
RegExКонструктор
public RegEx();Создаёт объект без скомпилированного шаблона. До Search, SearchAll, Sub и чтения метаданных групп вызовите Compile и проверьте Error.Ok/IsValid.
Методы12
Clearvoid
public void Clear();Освобождает скомпилированный код и делает IsValid ложным. Строка GetPattern остаётся прежней: это не полный сброс к состоянию нового объекта. Ранее полученный RegExMatch сохраняет свои данные.
Compile2 перегрузки
public Error Compile(string pattern);Компилирует PCRE2-шаблон и заменяет текущий. Старый код удаляется до попытки: при отказе прежний шаблон больше не работает, а GetPattern хранит новую неудачную строку. Перегрузка без showError использует true.
| Имя | Тип | По умолчанию |
|---|---|---|
pattern | string | — |
patternPCRE2-шаблон после обработки строкового литерала C#. Например, @"\d+" и "\\d+" передают один шаблон. Синтаксис .NET Regex не считается автоматически эквивалентным.
ErrorError.Ok при успехе, Error.Failed при отказе компиляции.
public Error Compile(string pattern, bool showError = true);Компилирует PCRE2-шаблон и заменяет текущий. Старый код удаляется до попытки: при отказе прежний шаблон больше не работает, а GetPattern хранит новую неудачную строку. Перегрузка без showError использует true.
| Имя | Тип | По умолчанию |
|---|---|---|
pattern | string | — |
showError | bool | true |
patternPCRE2-шаблон после обработки строкового литерала C#. Например, @"\d+" и "\\d+" передают один шаблон. Синтаксис .NET Regex не считается автоматически эквивалентным.
showErrorВыводить диагностику ошибки компиляции. false подавляет сообщение, но не делает шаблон валидным и не меняет код Error.
ErrorError.Ok при успехе, Error.Failed при отказе компиляции.
CreateFromString2 перегрузки
public static RegEx CreateFromString(string pattern);Создаёт объект и вызывает Compile. Даже при неудачной компиляции возвращает объект RegEx: проверяйте IsValid, а не только отсутствие null. Если нужен отдельный Error, используйте Compile экземпляра.
| Имя | Тип | По умолчанию |
|---|---|---|
pattern | string | — |
patternPCRE2-шаблон после обработки строкового литерала C#. Например, @"\d+" и "\\d+" передают один шаблон. Синтаксис .NET Regex не считается автоматически эквивалентным.
RegExНовый RegEx; на невалидном шаблоне объект может быть невалиден, оставаясь ненулевой ссылкой.
public static RegEx CreateFromString(string pattern, bool showError = true);Создаёт объект и вызывает Compile. Даже при неудачной компиляции возвращает объект RegEx: проверяйте IsValid, а не только отсутствие null. Если нужен отдельный Error, используйте Compile экземпляра.
| Имя | Тип | По умолчанию |
|---|---|---|
pattern | string | — |
showError | bool | true |
patternPCRE2-шаблон после обработки строкового литерала C#. Например, @"\d+" и "\\d+" передают один шаблон. Синтаксис .NET Regex не считается автоматически эквивалентным.
showErrorВыводить диагностику ошибки компиляции. false подавляет сообщение, но не делает шаблон валидным и не меняет код Error.
RegExНовый RegEx; на невалидном шаблоне объект может быть невалиден, оставаясь ненулевой ссылкой.
GetGroupCountint
public int GetGroupCount();Возвращает число захватывающих групп скомпилированного шаблона, без группы 0 полного совпадения. Нужен валидный шаблон; это не число совпадений в тексте.
intКоличество групп без группы 0; сначала проверяйте IsValid.
GetNamesstring[]
public string[] GetNames();Возвращает имена захватывающих групп шаблона. Позиция имени в массиве не является номером группы или обещанным порядком скобок. Для конкретного совпадения используйте RegExMatch.Names.
string[]Массив string[] имён, а не словарь номеров групп.
GetPatternstring
public string GetPattern();Возвращает последний переданный Compile текст, включая неудачную попытку. Clear не очищает эту строку; её наличие не доказывает IsValid.
stringСохранённый текст шаблона; он может не иметь работающего скомпилированного кода.
IsValidbool
public bool IsValid();Проверяет наличие скомпилированного кода. true не означает, что шаблон совпадёт с конкретным текстом, и не задаёт предел времени поиска.
booltrue при наличии скомпилированного кода; false у нового/очищенного объекта или после неудачной компиляции.
SearchRegExMatch
public RegExMatch Search(string subject, int offset = 0, int end = -1);Ищет первое совпадение в заданных границах исходного текста. offset не переносит начало строки для якоря ^; предыдущий контекст остаётся доступен проверкам границ. Позиции результата относятся к исходному subject и измеряются в нативных 32-битных единицах, не индексах UTF-16 C#.
| Имя | Тип | По умолчанию |
|---|---|---|
subject | string | — |
offset | int | 0 |
end | int | -1 |
subjectИсходный текст для поиска или замены. Нативные индексы кодовых точек для корректного Unicode могут отличаться от C# string.Length/Substring после символов вне BMP.
offsetНачальная позиция с 0 в нативных 32-битных единицах; должна быть >= 0. Не байтовый адрес и не индекс UTF-16.
endИсключающая правая граница, не длина. Отрицательное значение, включая -1 по умолчанию, означает до конца; граница за концом не расширяет subject. Единицы те же, что у offset.
RegExMatchRegExMatch либо null. null может означать отсутствие совпадения или отказ поиска; сигнатура SDK не показывает эту nullable-возможность.
SearchAllReckfell.Collections.Array<RegExMatch>
public Reckfell.Collections.Array<RegExMatch> SearchAll(string subject, int offset = 0, int end = -1);Возвращает непересекающиеся совпадения с позициями в исходном subject. После совпадения нулевой длины реализация продвигает начало следующего поиска на одну нативную единицу. Это не массив строк: каждый элемент — RegExMatch.
| Имя | Тип | По умолчанию |
|---|---|---|
subject | string | — |
offset | int | 0 |
end | int | -1 |
subjectИсходный текст для поиска или замены. Нативные индексы кодовых точек для корректного Unicode могут отличаться от C# string.Length/Substring после символов вне BMP.
offsetНачальная позиция с 0 в нативных 32-битных единицах; должна быть >= 0. Не байтовый адрес и не индекс UTF-16.
endИсключающая правая граница, не длина. Отрицательное значение, включая -1 по умолчанию, означает до конца; граница за концом не расширяет subject. Единицы те же, что у offset.
Reckfell.Collections.Array<RegExMatch>Типизированный Array<RegExMatch>; без совпадений массив пуст.
Substring
public string Sub(string subject, string replacement, bool all = false, int offset = 0, int end = -1);Заменяет первое или все совпадения. replacement разбирается как шаблон замены с ссылками $1/$name, а не как произвольный буквальный текст. Границы относятся к исходному subject; непоисковые префикс и суффикс сохраняются. Нужен валидный скомпилированный шаблон.
| Имя | Тип | По умолчанию |
|---|---|---|
subject | string | — |
replacement | string | — |
all | bool | false |
offset | int | 0 |
end | int | -1 |
subjectИсходный текст для поиска или замены. Нативные индексы кодовых точек для корректного Unicode могут отличаться от C# string.Length/Substring после символов вне BMP.
replacementШаблон подстановки; $1 и $name ссылаются на захваченные группы. Буквальный пользовательский текст может требовать отдельного экранирования для синтаксиса замены.
allfalse — заменить первое совпадение; true — все подходящие совпадения в заданных границах.
offsetНачальная позиция с 0 в нативных 32-битных единицах; должна быть >= 0. Не байтовый адрес и не индекс UTF-16.
endИсключающая правая граница, не длина. Отрицательное значение, включая -1 по умолчанию, означает до конца; граница за концом не расширяет subject. Единицы те же, что у offset.
stringРезультирующий полный текст при успешной замене. Ошибки PCRE2 могут дать пустой результат и диагностику; это не отдельный Error-результат.