В PHP вы можете достичь желаемого с помощью этого регулярного выражения:
(?:^([^:]*)|\K)[:,]\s+([^,]+)
(?:^([^:]*)|\K)
ищет начало строки, за которым следует некоторое количество не :
символов, или конец предыдущего совпадения (\K
) [:,]\s+
ищет :
между первым текстом или запятые между последующими значениями, после которых следует пробел ([^,]+)
ищет некоторое количество не запятых символов.Это будет совпадать до запятой или конца строки
Регулярное выражение захватывает текст до :
в группе 1 и значения после :
в группе 2. Вы можете использовать егокак это:
$string = 'Budget Cube Options: Read Only, Read/Write, Admin';
preg_match_all('/(?:^([^:]*+)|\K)[:,]\s+([^,]+)/', $string, $matches);
echo "'{$matches[1][0]}'= @('" . implode("','", $matches[2]) . "')";
Выход:
'Budget Cube Options'= @('Read Only','Read/Write','Admin')
Демонстрация на 3v4l.org
Regex Демонстрация на regex101