Строка была разделена с использованием знаков препинания в качестве разделителей; как собрать и поставить пунктуацию обратно?

Я реализую ненормативную лексику с помощью структуры данных Trie. Каждое нецензурное слово добавляется в Trie. Когда у меня есть строка для удаления ненормативной лексики, я взрываю строку с помощью знаков препинания и проверяю каждое слово с помощью Trie. Если найден, я заменяю звездочками. Затем я взрываю строку. Вопрос в том, как я могу отслеживать знаки препинания? Другими словами, как мне убедиться, что результирующая строка имеет пунктуацию?

1 ответ

Решение

Если вы используете preg_split() чтобы разделить вашу строку, рассмотрите возможность использования PREG_SPLIT_DELIM_CAPTURE флаг, чтобы захватить пунктуацию со спичками.

Рассматривать:

$str = "This. string/ has? punctuation!";
print_r(preg_split('/(\W+)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE));

/*
  Array
  (
      [0] => This
      [1] => . 
      [2] => string
      [3] => / 
      [4] => has
      [5] => ? 
      [6] => punctuation
      [7] => !
      [8] => 
  )
*/

Смотрите http://php.net/preg_split для получения дополнительной информации.

Другие вопросы по тегам