Регулярное выражение для захвата значений между двоеточиями, включая пустые значения

У меня есть строка с потенциально 9 значениями, разделенными двоеточиями. У меня будет 2 потенциальных структуры для этой строки:

value1:value2:value3:value4:value5::value7:value8:
value1:value2:value3:value4::value6:value7::value9

Я должен быть в состоянии разбить это и сохранить каждое отдельное значение. Мы придумали что-то вроде этого

^(.+)?\:(.+)?\:(.+)?\:(.+)?\:(.+)?(\:\:)(.+)?\:(.+)?(\:\:)$

но это не учитывает обе структуры.

Это используется в Adobe Analytics для захвата отдельных значений, если это вообще помогает.

1 ответ

Решение

Я предполагаю, что это для Классификационного Построителя Правил (CRB). Прокомментированный ответ @Wiktor в порядке, но вам не нужно включать \n в регулярном выражении он предоставил. Однако его регулярное выражение предполагает, что все ваши существующие ключи имеют все 9 значений или, по крайней мере, двоеточия для них. По моему опыту на практике это не всегда так; исторических данных может быть меньше, потому что требования были изменены. Если это так, то вот немного измененное регулярное выражение, которое предоставил @Wiktor:

^([^:]*)(?::([^:]*))?(?::([^:]*))?(?::([^:]*))?(?::([^:]*))?(?::([^:]*))?(?::([^:]*))?(?::([^:]*))?(?::([^:]*))?$

Это даст вам $1 через $9 для значений:

value1:value2:value3:value4:value5:value6:value7:value8:value9

$1 = value1
$2 = value2
$3 = value3
$4 = value4
$5 = value5
$6 = value6
$7 = value7
$8 = value8
$9 = value9

Или вы можете иметь пустой :: заполнители для них, например

value1:value2::value4:value5::value7:value8:value9

$1 = value1
$2 = value2
$3 = 
$4 = value4
$5 = value5
$6 = 
$7 = value7
$8 = value8
$9 = value9

И это также будет соответствовать текущим значениям, если у вас нет полной строки значения 9, например

value1:value2::value4

$1 = value1
$2 = value2
$3 = 
$4 = value4
Другие вопросы по тегам