Регулярные выражения
В 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>.*)"