PHP Заменить слово случайным словом из списка? - PullRequest
1 голос
/ 13 августа 2011

Используя PHP, я хочу взять фрагмент текста и выполнить поиск по нему и заменить некоторые слова другим словом из списка.

например,

Искать по тексту, чтобы найтилюбое слово в этом списке: красивое, красивое, великолепное, прекрасное, привлекательное, привлекательное

, а затем замените это слово другим из того же списка (но не выбирая то же слово).

Надеюсьэто имеет смысл!

спасибо заранее.

1 Ответ

2 голосов
/ 13 августа 2011

вы можете использовать preg_replace_callback:

$random_string = '…';
$needle = array('pretty', 'beautiful', 'gorgeous', 'lovely', 'attractive', 'appealing');
$new_string = preg_replace_callback(
  array_map(
    function($v) { return '/'.preg_quote($v).'/'; }, // assuming $needle does not contain '/' 
    $needle),
  function($matches) use($needle) {
    do {
      $new = $needle[rand(0, count($needle)-1)];
    while($new != $matches[0]) {
    return $new;
  },
  $random_string);

чтобы убедиться, что ваш массив $needle не содержит символов, которые имеют специальное значение в регулярном выражении, мы вызываем preg_quote для каждого элемента массива перед поиском.

вместо выполнения цикла do{}while() вы также можете скопировать массив и удалить совпавшее слово (в значительной степени зависит от фактических данных: несколько элементов → копировать и удалить, много элементов → выбрать один случайный случай, пока он не будет отличаться от соответствия)

...