выполнение нескольких preg_replace с различным поиском и заменой каждый раз - PullRequest
13 голосов
/ 07 февраля 2012

Я сделал что-то похожее с str_replace, используя это:

$string = $url;
$patterns = array();
    $patterns[0] = 'searchforme';
    $patterns[1] = 'searchforme1';
    $patterns[2] = 'searchforme2';
$replacements = array();
    $replacements[0] = 'replacewithme';
    $replacements[1] = 'replacewithme1';
    $replacements[2] = 'replacewithme2';
$searchReplace = str_replace($patterns, $replacements, $string);

Как мне поступить так же, как с preg_replace?

Я создал очень простой маленький парсер CSSкоторый ищет определенный тег в комментарии, обернутом вокруг свойств CSS, и заменяет его новыми данными.

$stylesheet = file_get_contents('temp/'.$user.'/css/mobile.css');

$cssTag = 'bodybg';
$stylesheet = preg_replace("/(\/\*".$cssTag."\*\/).*?(\/\*\/".$cssTag."\*\/)/i", "\\1 background: $bg url(../images/bg.png) repeat-x; \\2", $stylesheet);

file_put_contents('temp/'.$user.'/css/mobile.css',''.$stylesheet.'');

У меня есть несколько «cssTag», и им всем понадобится уникальный css длязаменить на (фон, цвет, размер шрифта и т. д.), поэтому я ищу такой метод, как str_replace, описанный выше.

Ответы [ 2 ]

36 голосов
/ 07 февраля 2012

preg_replace может принимать массив, как str_replace

$string = 'I have a match1 and a match3, and here\'s a match2';
$find = array('/match1/', '/match2/');
$replace = array('foo', 'bar');
$result = preg_replace($find, $replace, $string);
0 голосов
/ 27 мая 2019

Вы также можете использовать Библиотека T-Regx

<?php
$stylesheet = file_get_contents('temp/'.$user.'/css/mobile.css');

$cssTag = 'bodybg';
$stylesheet = pattern("(/\*" . $cssTag . "\*/).*?(/\*/" . $cssTag . "\*/)", 'i')
    ->replace($stylesheet)
    ->all()
    ->by()
    ->map([
        'searchforme' => 'replacewithme',
        'searchforme1' => 'replacewithme2',
        'searchforme1' => 'replacewithme2',
    ]);

Вам не нужны разделители /, потому что T-Regx автоматически добавляет их

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...