Регулярка для замены цвета в css preg_replace Не пойму что не так, в онлайн тестах регулярка работает, в коде отказывается работать напрочь, если после кода цвета ещё что-то есть. pattern пробовал и так Код (Text): ~(/\*var\*/.*?[^#])#\w{6}(;|.+;/\*--color-link-hover\*/)~iU и так Код (Text): ~(/\*var\*/.*?[^#])#\w{6}(.*?;/\*--color-link-hover\*/)~iU replacement Код (Text): $1#cccccc$2 примерный subject Код (CSS): strong { /*var*/color: #d720e8;/*--color-link-hover*/ } strong { /*var*/color: #3bdd1f !important;/*--color-link-hover*/ } Вот этот вариант работает, если после кода цвета сразу точка с запятой. Код (Text): ~(/\*var\*/.*?[^#])#\w{6}(;/\*--color-link-hover\*/)~iU Помогите, скажите, что не так? Ладно бы в онлайн тестах не работало, а так даже не знаю что и думать. Спасибо.
@rex751, попробуйте такой вариант: Код (Text): (/\*var\*/.*?#)[a-fA-F\d]{3,6} И текст для замены: Код (Text): $1cccccc (без $2 и "шарпа")
у меня там переменные и в реале вот так : Код (Text): $pattern = "~(/\*var\*/.*?[^#])#.{6}(.*?;/\*--" . $row['type'] . "-" . $row['name'] . "\*/)~iU";
@rex751, если надо заменить только цвет, то для чего в шаблон добавлять ещё "переменные"? Цвет по шаблону однозначно находится до них.
Это не один цвет, и переменных много, паттерн и шаблон в массивах, это я уже упрощаю, пытаюсь понять из-за чего глюк, плохо что в онлайн тестере всё прекрасно работает. ps хотя идею я вашу понял, то есть имя переменной вместо var, и там просто менять цвет, так ? --- Добавлено --- Попробовал так и всё равно не работает( Код (Text): $pattern = "~(/\*--" . $row['type'] . "-" . $row['name'] . "\*/.*?[^#])#[a-fA-F\d]{6}~iU"; $replacement = '$1'.$row['value']; Код (CSS): strong { /*--color-link-hover*/color: #cd00e0; } strong { /*--color-link-hover*/color: #3bdd1f !important; }
@rex751, модификатор U - инвертирует "жадность" квантификаторов. Либо его убрать, либо вопрос после квантификатора. Отрицание "шарпа" в первой группе шаблона - ни к чему.
не работает( Код (Text): $pattern = "~(/\*var\*/.*?[^#])#\w{6}(.*?;/\*--" . $row['type'] . "-" . $row['name'] . "\*/)~"; $replacement = '$1'.$row['value'].'$2'; --- Добавлено --- практически ничего не воспринимает во втором шаблоне перед точкой с запятой, Код (Text): (.*?;/\*--" хотя в онлайн тестах всё вышеперечисленное работает, может это глюк php или мой(?
@rex751, не все рекомендации выполнили PHP: $str = "strong { /*var*/color: #d720e8;/*--color-link-hover*/ } strong { /*var*/color: #3bdd1f !important;/*--color-link-hover*/ }"; $row['type'] = 'color'; $row['name'] = 'link-hover'; $pattern = "~(/\*var\*/.*?)#\w{6}(.*?/\*--" . $row['type'] . "-" . $row['name'] . "\*/)~"; $replacement = '$1#CCCCCC$2'; $str2 = preg_replace($pattern, $replacement, $str); var_dump($pattern, $str, $str2);