За последние 24 часа нас посетили 87292 программиста и 4639 роботов. Сейчас ищут 2040 программистов ...

Регулярка в коде не работает, а в онлайн тесте работает.

Тема в разделе "PHP для новичков", создана пользователем rex751, 27 июл 2018.

  1. rex751

    rex751 Новичок

    С нами с:
    22 июн 2017
    Сообщения:
    10
    Симпатии:
    0
    Регулярка для замены цвета в css preg_replace
    Не пойму что не так, в онлайн тестах регулярка работает, в коде отказывается работать напрочь, если после кода цвета ещё что-то есть.
    pattern пробовал и так
    Код (Text):
    1. ~(/\*var\*/.*?[^#])#\w{6}(;|.+;/\*--color-link-hover\*/)~iU
    и так
    Код (Text):
    1. ~(/\*var\*/.*?[^#])#\w{6}(.*?;/\*--color-link-hover\*/)~iU
    replacement
    Код (Text):
    1. $1#cccccc$2
    примерный subject
    Код (CSS):
    1. strong {
    2.     /*var*/color: #d720e8;/*--color-link-hover*/
    3. }
    4. strong {
    5.     /*var*/color: #3bdd1f !important;/*--color-link-hover*/
    6. }
    Вот этот вариант работает, если после кода цвета сразу точка с запятой.
    Код (Text):
    1. ~(/\*var\*/.*?[^#])#\w{6}(;/\*--color-link-hover\*/)~iU
    Помогите, скажите, что не так? Ладно бы в онлайн тестах не работало, а так даже не знаю что и думать.
    Спасибо.
     
  2. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @rex751, попробуйте такой вариант:
    Код (Text):
    1. (/\*var\*/.*?#)[a-fA-F\d]{3,6}
    И текст для замены:
    Код (Text):
    1. $1cccccc
    (без $2 и "шарпа")
     
  3. rex751

    rex751 Новичок

    С нами с:
    22 июн 2017
    Сообщения:
    10
    Симпатии:
    0
    у меня там переменные и в реале вот так :

    Код (Text):
    1. $pattern = "~(/\*var\*/.*?[^#])#.{6}(.*?;/\*--" . $row['type'] . "-" . $row['name'] . "\*/)~iU";
    2.                                
     
  4. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @rex751, если надо заменить только цвет, то для чего в шаблон добавлять ещё "переменные"? Цвет по шаблону однозначно находится до них.
     
  5. rex751

    rex751 Новичок

    С нами с:
    22 июн 2017
    Сообщения:
    10
    Симпатии:
    0
    Это не один цвет, и переменных много, паттерн и шаблон в массивах, это я уже упрощаю, пытаюсь понять из-за чего глюк, плохо что в онлайн тестере всё прекрасно работает.

    ps хотя идею я вашу понял, то есть имя переменной вместо var, и там просто менять цвет, так ?
    --- Добавлено ---
    Попробовал так и всё равно не работает(

    Код (Text):
    1. $pattern = "~(/\*--" . $row['type'] . "-" . $row['name'] . "\*/.*?[^#])#[a-fA-F\d]{6}~iU";
    2.                                 $replacement = '$1'.$row['value'];
    3.                                
    Код (CSS):
    1. strong {
    2.     /*--color-link-hover*/color: #cd00e0;
    3. }
    4. strong {
    5.     /*--color-link-hover*/color: #3bdd1f !important;
    6. }
     
  6. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @rex751, модификатор U - инвертирует "жадность" квантификаторов.
    Либо его убрать, либо вопрос после квантификатора.
    Отрицание "шарпа" в первой группе шаблона - ни к чему.
     
    rex751 нравится это.
  7. rex751

    rex751 Новичок

    С нами с:
    22 июн 2017
    Сообщения:
    10
    Симпатии:
    0
    не работает(

    Код (Text):
    1. $pattern = "~(/\*var\*/.*?[^#])#\w{6}(.*?;/\*--" . $row['type'] . "-" . $row['name'] . "\*/)~";
    2. $replacement = '$1'.$row['value'].'$2';
    3.                                
    --- Добавлено ---
    практически ничего не воспринимает во втором шаблоне перед точкой с запятой,
    Код (Text):
    1. (.*?;/\*--"
    хотя в онлайн тестах всё вышеперечисленное работает, может это глюк php или мой(?
     
  8. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @rex751, не все рекомендации выполнили :)
    PHP:
    1. $str = "strong {
    2.    /*var*/color: #d720e8;/*--color-link-hover*/
    3. }
    4. strong {
    5.    /*var*/color: #3bdd1f !important;/*--color-link-hover*/
    6. }";
    7. $row['type'] = 'color';
    8. $row['name'] = 'link-hover';
    9. $pattern = "~(/\*var\*/.*?)#\w{6}(.*?/\*--" . $row['type'] . "-" . $row['name'] . "\*/)~";
    10. $replacement = '$1#CCCCCC$2';
    11. $str2 = preg_replace($pattern, $replacement, $str);
    12. var_dump($pattern, $str, $str2);
     
    rex751 нравится это.
  9. rex751

    rex751 Новичок

    С нами с:
    22 июн 2017
    Сообщения:
    10
    Симпатии:
    0
    Я столько времени убил , а вы так походу) ЗАРАБОТАЛО!!!!!!!! ОГРОМНОЕ ПРЕОГРОМНОЕ СПАСИБО!!!