Регулярное выражение для захвата значений между двоеточиями, включая пустые значения
У меня есть строка с потенциально 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