Регулярные выражения
В 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>.*)"
Результат поиск будет таким:
| @timestamp | file_path | root_directory |
|---|---|---|
| 2024-04-05T05:43:04.919Z | C:\\Users | Users |
Вместо того, чтобы использовать четрые обратных слеша (\\\\), можно достичь того же результата поиска в регулярном выражении с помощью \x5c.
| makeresults
| eval file_path="C:\\Users"
| rex field=file_path max_match=3 ".*\x5с(?<root_directory>.*)"