Поиск и замена случайного слова

Ну, во-первых, позвольте мне сказать, прежде чем опубликовать это, я много раз тестировал, но в настоящее время я не знаю, что еще делать, потому что у меня ничего не работает.

Это код, который у меня есть в настоящее время:

<?php
// These are the arrays given by the application. All of them has an "%s" within.
// For example...
$arrs = array(
"this is a %s array" => "converted1 %s text",
"value %s test" => "converted2 %s text",
"test %s test" => "converted3 %s text");

$text = "This is a random text. Which can contains or not some of the expressions listed above. In this case it contains this: this is a magic array, value hey test, test php test";

// The output should be:
// "This is a random text. Which can contains or not some of the expressions listed above. In this case it contains this: CONVERTED magic TEXT, CONVERTED2 hey TEXT, CONVERTED3 php TEXT"
foreach($arrs as $k => $v){
// Seriously, I don't know what's next here... also I'm thinking this foreach is not right here.
}

?>

Основная цель, это написать что-то случайное в поле ввода текста. Поэтому я проверяю в текстовом поле, если некоторые из ключей массива ($arrs), проблема в том, что я не могу обнаружить его с помощью strpos% s всегда будет случайным, поэтому найти его немного сложнее …

Допустим, я пишу «это случайный массив» (он находится в массиве), поэтому, если мы проверим его значение, мы увидим, что это будет «convert1 RANDOM text».

Я проверил на использование шаблонов, а также с explode();, а также preg_replace_callbackи у меня ничего не работает. Это действительно сводит меня с ума …

Спасибо большое, ребята.

0

Решение

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

<?php
$pattern = '~this is a ([^ ]*) array~U';
$replace = 'converted1 $1 text';
$text = preg_replace($pattern,$replace,$text);

у вас уже есть ассоциированный массив, вы можете изменить ключи на регулярные выражения и значения для замены строк (с экранированной группой, например $ 1 выше). Также в пределах для каждого() Вы можете проверить сначала:

<?php
if (preg_match($k,$text)) {
// do the replacing here
}

Замечания:
Я использовал [^] * соответствовать одному слову. Это не единственный способ, это не может быть лучшим способом. Вы также можете использовать \ ш, но мне лично это не нравится 🙂

Редактировать:

Здесь вы идете с готовым кодом, который работает (только что проверил его на моем XAMPP)

<?php
$arrs = array(
"~this is a ([^ ]*) array~U" => "converted1 $1 text",
"~value ([^ ]*) test~U" => "converted2 $1 text",
"~test ([^ ]*) test~U" => "converted3 $1 text");

$text = "This is a random text. Which can contains or not some of the expressions listed above. In this case it contains this: this is a magic array, value hey test, test php test";

foreach($arrs as $k => $v){
if (preg_match($k,$text)) {
$text = preg_replace($k,$v,$text);
}
}

?>
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector