preg_match, str_replace и весь этот джаз

У меня есть строка, которая содержит несколько ключевых слов в квадратных скобках, которые я хочу идентифицировать, извлекать и заменять чем-то другим:

Например:

'Вы выиграете [выигрыши] или [ломтик].

Я хочу определить все термины внутри квадратов, принять эти условия и заменить их на определенные значения.

Так должно получиться так:

'Вы выиграете 100 или 95%.

Есть идеи?

0
Возможная публикация: stackoverflow .com/вопросы/2403122/& hellip;
добавлено автор Peon, источник
Возможная публикация: stackoverflow .com/вопросы/2403122/& hellip;
добавлено автор Peon, источник

6 ответы

Кусок пирога

$search = array('[winnings]', '[slice]');
$replace = array(100, '95%');

echo str_replace($search, $replace, 'You will win [winnings] or [slice].');
3
добавлено

Кусок пирога

$search = array('[winnings]', '[slice]');
$replace = array(100, '95%');

echo str_replace($search, $replace, 'You will win [winnings] or [slice].');
3
добавлено
$replacements = array(
    'winnings' => '100'
    , 'slice'  => '95%'
    , 'foobar' => 'Sean Bright'
);

$subject = '[foobar], You will win [winnings] or [slice]!';

$result = preg_replace_callback(
    '/\[([^\]]+)\]/',
    function ($x) use ($replacements) {
        if (array_key_exists($x[1], $replacements))
            return $replacements[$x[1]];
        return '';
    },
    $subject);

echo $result;

Обратите внимание, что это полностью развалится, если у вас есть несбалансированные скобки (т. Е. [[foo] ))

Для версий PHP менее 5,3:

$replacements = array(
    'winnings' => '100'
    , 'slice'  => '95%'
    , 'foobar' => 'Sean Bright'
);

function do_replacement($x)
{
    global $replacements;

    if (array_key_exists($x[1], $replacements))
        return $replacements[$x[1]];
    return '';
}

$subject = '[foobar], You will win [winnings] or [slice]!';

$result = preg_replace_callback(
    '/\[([^\]]+)\]/',
    'do_replacement',
    $subject);

echo $result;
1
добавлено
Какую ошибку вы получаете? Я тестировал это локально, и он работает.
добавлено автор Sean Bright, источник
Какая версия PHP? Должно быть старше 5.3
добавлено автор Sean Bright, источник
Добавлено решение для PHP <5.3
добавлено автор Sean Bright, источник
Как внешний вид этого, но я получаю сообщение об ошибке с кодом?
добавлено автор ojsglobal, источник
Ошибка анализа: ошибка синтаксиса, неожиданный T_FUNCTION в /home/slimming/public_html/aardvark.php в строке 12, который является: function ($ x) use ($ replacements) {
добавлено автор ojsglobal, источник
Я использую PHP 5.2.9
добавлено автор ojsglobal, источник
$replacements = array(
    'winnings' => '100'
    , 'slice'  => '95%'
    , 'foobar' => 'Sean Bright'
);

$subject = '[foobar], You will win [winnings] or [slice]!';

$result = preg_replace_callback(
    '/\[([^\]]+)\]/',
    function ($x) use ($replacements) {
        if (array_key_exists($x[1], $replacements))
            return $replacements[$x[1]];
        return '';
    },
    $subject);

echo $result;

Обратите внимание, что это полностью развалится, если у вас есть несбалансированные скобки (т. Е. [[foo] ))

Для версий PHP менее 5,3:

$replacements = array(
    'winnings' => '100'
    , 'slice'  => '95%'
    , 'foobar' => 'Sean Bright'
);

function do_replacement($x)
{
    global $replacements;

    if (array_key_exists($x[1], $replacements))
        return $replacements[$x[1]];
    return '';
}

$subject = '[foobar], You will win [winnings] or [slice]!';

$result = preg_replace_callback(
    '/\[([^\]]+)\]/',
    'do_replacement',
    $subject);

echo $result;
1
добавлено
Какую ошибку вы получаете? Я тестировал это локально, и он работает.
добавлено автор Sean Bright, источник
Какая версия PHP? Должно быть старше 5.3
добавлено автор Sean Bright, источник
Добавлено решение для PHP <5.3
добавлено автор Sean Bright, источник
Как внешний вид этого, но я получаю сообщение об ошибке с кодом?
добавлено автор ojsglobal, источник
Ошибка анализа: ошибка синтаксиса, неожиданный T_FUNCTION в /home/slimming/public_html/aardvark.php в строке 12, который является: function ($ x) use ($ replacements) {
добавлено автор ojsglobal, источник
Я использую PHP 5.2.9
добавлено автор ojsglobal, источник

И если вы хотите использовать регулярное выражение для поиска совпадений:

$content = "You will win [winnings] or [slice].";
preg_match_all('/\[([a-z]+)\]/i', $content, $matches);

$content = str_replace($matches[0], array('100', '95%'), $content);

var_dump($content);
0
добавлено

И если вы хотите использовать регулярное выражение для поиска совпадений:

$content = "You will win [winnings] or [slice].";
preg_match_all('/\[([a-z]+)\]/i', $content, $matches);

$content = str_replace($matches[0], array('100', '95%'), $content);

var_dump($content);
0
добавлено
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp