Перейти к основному содержимому
Версия: 3.2

Регулярные выражения

В Smart Monitor Language (SML) регулярные выражения используются с командой rex. Также возможно их применение с оценочными функциями, такими как match и replace.

Для получения дополнительной информации см. команда rex.

Данная статья предоставляет рекомендации по работе с регулярными выражениями в запросах Smart Monitor.

Символ обратного слеша (backslash) в регулярных выражениях

В регулярных выражениях символ обратного слеша (\) используется для экранирования специальных символов, имеющих особое значение, таких как точка (.), двойные кавычки (") и сам обратный слеш. Например, точка в регулярном выражении обычно означает любой символ, кроме переноса строки. Чтобы найти именно точку, ее нужно экранировать обратным слешем, записав как \. в своем выражении.

При поиске, включающем регулярное выражение с двойным обратным слешем, например, путь к файлу c:\\Users, поиск интерпретирует первый обратный слеш как экранирующий символ в регулярном выражении. Таким образом, путь к файлу будет интерпретирован как c:\Users, поскольку один из обратных слешей удаляется. Чтобы найти данный путь, необходимо экранировать оба обратных слеша в корневой части пути, указав 4 последовательных обратных слеша - c:\\\\Users. Для более длинного пути, например c:\\Users\Docs, в строке поиска можно указать c:\\\\Users\\Docs.

Одна из причин, по которой могут понадобиться дополнительные экранирующие обратные слеши, заключается в том, что платформа Smart Monitor парсит текст дважды: один раз для SML, а затем снова для регулярных выражений. Каждый разбор применяет свою собственную логику использования обратных слешей, трактуя их как специальные символы, которым требуется дополнительный обратный слеш для литерального представления. В результате, \\ в SML становится \ перед разбором как регулярное выражение, а \\\\ в SML становится \\ перед разбором как регулярное выражение.

Как избежать избыточного экранирования символов обратного слеша

Для того, чтобы избежать избыточного экранирования символов обратного слеша (\) в регулярных выражениях Smart Monitor, можно использовать шестнадцатеричный код \x5c. Этот код эквивалентен символу обратного слеша и позволяет обойти необходимость двойного экранирования.

Например, данный поиск извлекает название директории, которая следует после двух обратных слешей:

| makeresults
| eval file_path="C:\\Users"
| rex field=file_path max_match=3 ".*\\\\(?<root_directory>.*)"

Результат поиск будет таким:

@timestampfile_pathroot_directory
2024-04-05T05:43:04.919ZC:\\UsersUsers

Вместо того, чтобы использовать четрые обратных слеша (\\\\), можно достичь того же результата поиска в регулярном выражении с помощью \x5c.

| makeresults
| eval file_path="C:\\Users"
| rex field=file_path max_match=3 ".*\x5с(?<root_directory>.*)"