Искомые данные должны быть в 1 строке!
Для тестирования можно использовать сайт regex101: build, test, and debug regex -есть русский язык и подсказки.
Вывод \0 - вывести все.
Вывод \1 - вывести значение попадающее под регулярку в скобках ([A-z]+)
Вывод \2 - выводит значение вторых скобок ([A-z]+) ([0-9]+)
Можно так ([A-z]+) ([0-9]+) и вывод \1 \2 либо \2;\1 указав между значениями что угодно
максимум можно вывести \9 значений, \10 - уже работать не будет будет 1 значение и в конце 0
вывод - шаблон форматирования вывода. \N (где N=1..9) - управляющая последовательность заменяется N-ной совпадающей группой. Управляющая последовательность \0 заменяется совпадающим текстом.
Подробнее Оф. Регулярные выражения
в некоторых случаях при использовании спец символов их нужно экранировать.
Так же для регулярок существуют выражения по большей часть они везде одинаковы будь то sed или notepad++ powershell и тд
Токены
Показать
для Linux Bash
[:alnum:] - Алфавитные символы: «[:alpha:]» и «[:digit:]»; в локали «C» и кодировке символов ASCII, это то же самое что и «[0-9A-Za-z]».
[:alpha:] - Алфавитные символы: «[:lower:]» и «[:upper:]»; в локали «C» и кодировке символов ASCII, это то же самое что и «[A-Za-z]».
[:blank:] - Пустые символы: пробел и табуляция.
[:cntrl:] - Управляющие символы. В ASCII эти символы имеют восьмеричные коды от 000 до 037 и 177 (DEL). В других наборах символов это эквивалентные символы, если они есть.
[:digit:] - Цифры: 0 1 2 3 4 5 6 7 8 9.
[:graph:] - Графические символы: «[:alnum:]» и «[:punct:]».
[:lower:] - Буквы в нижнем регистре, в локали «C» и кодировке символов ASCII это a b c d e f g h i j k l m n o p q r s t u v w x y z.
[:print:] - Печатные символы: «[:alnum:]», «[:punct:]», и пробел.
[:punct:] - Пунктуационные символы; в локали «C» и кодировке символов ASCII, это ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~.
[:space:] - Пробельные символы: в локали «C», это табуляция, новая строка, вертикальная табуляция, разрыв страницы, возврат каретки и пробел.
[:upper:] - Буквы в верхнем регистре: в локали «C» и кодировке символов ASCII, это A B C D E F G H I J K L M N O P Q R S T U V W X Y Z.
[:xdigit:] - Шестнадцатеричные цифры: 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f.
regex101: build, test, and debug regex
[:alnum:] - Алфавитные символы: «[:alpha:]» и «[:digit:]»; в локали «C» и кодировке символов ASCII, это то же самое что и «[0-9A-Za-z]».
[:alpha:] - Алфавитные символы: «[:lower:]» и «[:upper:]»; в локали «C» и кодировке символов ASCII, это то же самое что и «[A-Za-z]».
[:blank:] - Пустые символы: пробел и табуляция.
[:cntrl:] - Управляющие символы. В ASCII эти символы имеют восьмеричные коды от 000 до 037 и 177 (DEL). В других наборах символов это эквивалентные символы, если они есть.
[:digit:] - Цифры: 0 1 2 3 4 5 6 7 8 9.
[:graph:] - Графические символы: «[:alnum:]» и «[:punct:]».
[:lower:] - Буквы в нижнем регистре, в локали «C» и кодировке символов ASCII это a b c d e f g h i j k l m n o p q r s t u v w x y z.
[:print:] - Печатные символы: «[:alnum:]», «[:punct:]», и пробел.
[:punct:] - Пунктуационные символы; в локали «C» и кодировке символов ASCII, это ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~.
[:space:] - Пробельные символы: в локали «C», это табуляция, новая строка, вертикальная табуляция, разрыв страницы, возврат каретки и пробел.
[:upper:] - Буквы в верхнем регистре: в локали «C» и кодировке символов ASCII, это A B C D E F G H I J K L M N O P Q R S T U V W X Y Z.
[:xdigit:] - Шестнадцатеричные цифры: 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f.
regex101: build, test, and debug regex
\s+ регулярка пробелы любое количество
A-z- любые en буквы и тире
[0-9]+ блок цифр
.* любые символы
Обратите внимание, что квадратные скобки в этих классах имён являются частью символических имён и должны быть включены в дополнение к квадратным скобкам, отделяющим выражения в квадратных скобках
Примеры регулярок в шаблоне Яндекс Погода в Zabbix через http агента
Тестовые данные
Показать
{"now":1662397751,"now_dt":"2022-09-05T17:09:11.987912Z","info":{"url":"https://yandex.ru/pogoda/20125?lat=59.9 ... 13","parts":[{"part_name":"night","temp_min":5,"temp_avg":5,"temp_max":6,"wind_speed":1.9,"wind_gust":5,"wind_dir":"nw","pressure_mm":747,"pressure_pa":995,"humidity":90,"prec_mm":0,"prec_prob":0,"prec_period":480,"icon":"ovc","condition":"overcast","feels_like":2,"daytime":"n","polar":false},{"part_name":"morning","temp_min":5,"temp_avg":7,"temp_max":9,"wind_speed":2.4,"wind_gust":5.6,"wind_dir":"nw","pressure_mm":746,"pressure_pa":994,"humidity":89,"prec_mm":0.3,"prec_prob":20,"prec_period":360,"icon":"ovc_-ra","condition":"light-rain","feels_like":4,"daytime":"d","polar":false}]}}
([0-9]+.[0-9]+) - число с точкой или без но минимум 3х значное иначе ошибка
([0-9.]+) - Число с точкой(ами) или без точки может быть 1 значное число
Минимальная температура Утро
morning","temp_min":([0-9.]+),"temp_avg
2 строки с одинаковым содержимым кроме первого слова (утро день вечер ночь) строка может быть первой или последней
Можно делать так указывая начало строки и жестко всю строку (если где то указать .* получи данные последней строки)
morning","temp_min":([0-9.]+),"temp_avg
Но тут есть ограничение длина строки регулярного выражения например полярный день или нет уже не влезет
morning","temp_min":[0-9.]+,"temp_avg":[0-9.]+,"temp_max":[0-9.]+,"wind_speed":[0-9.]+,"wind_gust":[0-9.]+,"wind_dir":"[A-z-]+","pressure_mm":[0-9.]+,"pressure_pa":[0-9.]+,"humidity":[0-9.]+,"prec_mm":[0-9.]+,"prec_prob":[0-9.]+,"prec_period":[0-9.]+,"icon":"[A-z-_]+","condition":"[A-z-]+","feels_like":[0-9.]+,"daytime":"[A-z-]+","polar":([A-z-]+)
И что делать?
если водной строке одинаковые слова и строки меняются местами может быть 1 а может быть 2
Обрезать до первого совпадения, а не последнего
Regex: соответствие до первого вхождения символа
[^;] или экранирован /[^;]*/
заключив список символов в [], который будет соответствовать любому символу из списка. Если первым символом После " ["является"^", класс соответствует любому символу, не включенному в список.
получаем значение до первой ;
morning"[^}]*polar":([A-z-]+)
? ленивый оператор, поэтому регулярное выражение захватывает как можно меньше перед сопоставлением ;.
.*?
Рассмотрим разницу
morning".*polar":([A-z-]+) - берется последняя строка не правильно для нас
morning".*?polar":([A-z-]+) - правильно
morning"[^}]*polar":([A-z-]+) - правильно
Вывод \1 еще пример значение 0.256987 (0 - часы . минуты )
([0-9]+).([0-9][0-9]) вывод \1:\2
Получаем 0:25
В элементах используются разные варианты регулярок более длинные и короткие более универсальные.
В интернете очень много примеров по регуляркам, в некоторых случаях не забывайте экранировать спец символы.
Еще пример Монитор внешнего входа и выхода пользователей Windows
Регулярка в имени триггера
Имя RDP auth {{ITEM.VALUE}.iregsub("(Пользователь: .*)", "\1")} {{ITEM.VALUE}.iregsub("(источника: .*)", "\1")} {{ITEM.VALUE}.iregsub("(Код сеанса: .*)", "\1")}
Имя RDP auth povtor {{ITEM.VALUE}.iregsub("(Пользователь: .*)", "\1")} {{ITEM.VALUE}.iregsub("(источника: .*)", "\1")} {{ITEM.VALUE}.iregsub("(Код сеанса: .*)", "\1")}
Имя RDP auth otkl {{ITEM.VALUE}.iregsub("(Пользователь: .*)", "\1")} {{ITEM.VALUE}.iregsub("(источника: .*)", "\1")} {{ITEM.VALUE}.iregsub("(Код сеанса: .*)", "\1")}
Регулярка в теге триггера
Имя {{ITEM.VALUE}.iregsub("Код сеанса: (.*)", "\1")}
Имя RDP auth {{ITEM.VALUE}.iregsub("(Тип входа: .*)", "\1")} {{ITEM.VALUE}.iregsub("(Имя рабочей станции: .*)", "\1")}
Для видеонаблюдения
Пример есть у нас массив JSON нам нужно для 101 канала выбрать параметр videoQualityControlType
регулярка будет
StreamingChannelList.*StreamingChannel.*id":"101".*?videoQualityControlType":"(.*?)"
Или
id":"101".*?videoQualityControlType":"(.*?)"
или
id":"101".*?videoQualityControlType":"([A-z]+)"
Вывод: \1
Тестовые данные
Показать
{"StreamingChannelList":{"StreamingChannel":[{"id":"101","channelName":"101","enabled":"true","Transport":{"ControlProtocolList":{"ControlProtocol":{"streamingTransport":"RTSP"}}},"Video":{"enabled":"true","dynVideoInputChannelID":"1","videoCodecType":"H.265","videoResolutionWidth":"2560","videoResolutionHeight":"1440","videoQualityControlType":"VBR","fixedQuality":"75","vbrUpperCap":"3072","vbrLowerCap":"32","maxFrameRate":"2000","snapShotImageType":"JPEG","SmartCodec":{"enabled":"true"}}},{"id":"102","channelName":"102","enabled":"true","Transport":{"ControlProtocolList":{"ControlProtocol":{"streamingTransport":"RTSP"}}},"Video":{"enabled":"true","dynVideoInputChannelID":"1","videoCodecType":"H.265","videoResolutionWidth":"640","videoResolutionHeight":"360","videoQualityControlType":"VBR","fixedQuality":"60","vbrUpperCap":"512","vbrLowerCap":"32","maxFrameRate":"2000","snapShotImageType":"JPEG","SmartCodec":{"enabled":"true"}}}
Другие варианты предобработки этого же массива данных
Показать
Предобработка JSONPath:
$.StreamingChannelList.StreamingChannel[?(@.id==101)].Video.videoQualityControlType
$[0]
Тестировать Онлайн JSONPath
Предобработка JavaScript
$.StreamingChannelList.StreamingChannel[?(@.id==101)].Video.videoQualityControlType
$[0]
Тестировать Онлайн JSONPath
Предобработка JavaScript
Код: Выделить всё
// Преобразуем JSON в объект JS
var obj = JSON.parse(value);
// Получаем индексы массива циклом
for(var i = 0; i < [obj][0]['StreamingChannelList']['StreamingChannel'].length; i++) {
// По индексу массива перебираем блоки (каналы) и выводим значение ID канала
var channel = [obj][0]['StreamingChannelList']['StreamingChannel'][i];
// Искомый ID сравниваем, если совпало выводим искомый параметр из данного блока
if ( channel.id == "{#CHANNEL_ID}" ) {
// Проверка вывода индекса
//return(i);
// Доступ к индивидуальному значению из объекта JS
return(obj["StreamingChannelList"]["StreamingChannel"][(i)]["Video"]["videoQualityControlType"]); // Вывод Тип контроля качества видео
break;
}
//return(channel);
}
(?i) режим без учета регистра ВКЛ
(?-i) режим без учета регистра ВЫКЛ