#php #preg-replace #strip
#php #preg-заменить #Стриптиз
Вопрос:
Как бы вы разделили пробелы между словами из одной буквы. Пример:
- строка: «Т И Г Р У С ФУ и Дрезга д. о. о.». Нью-Йорк»
- мы хотим: «TIGRUS FOO и Drezga d.o.o. Нью-Йорк»
Если возможно, preg_replace решение, извините, что не сказал раньше.
Комментарии:
1. я пробовал некоторые коды preg_replace, но я не продвинулся далеко, поэтому не пишу его под вопросом. Лучшие
Ответ №1:
Работает следующее.
$string = "T I G R U S FOO and Drezga d . o . o . New York";
$words = explode(" ", $string);
$output = array();
$temp_word = "";
foreach($words as $word)
{
if (strlen($word) == 1)
{
$temp_word .= $word;
}
else
{
if ($temp_word != "")
{
$output[] = $temp_word;
$temp_word = "";
}
$output[] = $word;
}
}
$output = implode(" ", $output);
echo $output;
Выводит: «TIGRUS FOO и Drezga d.o.o. Нью-Йорк»
Комментарии:
1. Строго говоря, это неправильно обработает случаи, когда вам понадобится отдельный символ сам по себе (есть несколько таких распространенных слов, и не только в английском). Но это может быть достаточно хорошо для ваших целей.
2. @Austin, хорошая мысль, о чем следует знать, если запрашивающий использует это решение.
3. Galzer спасибо, но я хотел, чтобы решение preg_replace, если это возможно, было немного неприятным, но спасибо за ваши усилия. лучший, Лука
Ответ №2:
Попробуйте этот php-код:
<?php
$str = "T I G R U S FOO and Drezga d . o . o . New York";
$out = preg_replace('~(b.)s~', "\1", $str);
var_dump($out);
?>
ВЫВОД
string(38) "TIGRUSFOO and Drezga d. o. o. New York
Обновить
<?php
$str = "T I G R U S FOO and Drezga d . o . o . New York N Y";
$s = preg_replace('~((?<=^[^s])|(?<=s[^s]))s(?=[^s](s|$))~', "", $str);
var_dump($s);
?>
ВЫВОД
string(40) "TIGRUS FOO and Drezga d.o.o. New York NY"
?>
Комментарии:
1. -1 Вывод не соответствует тому, что было запрошено. Ожидаемый результат: «TIGRUS FOO и Drezga d.o.o. Нью-Йорк» У вас есть дополнительный интервал между d.o.o. и отсутствует пробел между «TIGRUS» и «FOO».
2. это самое близкое решение. если бы мы только могли разрешить пробел между TIGRUS и FOO. Я думаю, это должно проверить, есть ли в следующей букве пробел в качестве следующего символа. И намного лучше, чем первый, я хотел бы справиться с этим с помощью preg_replace, если это возможно.
3. @Luka amp; @ Gazler: Пришлось выйти после публикации моего ответа сегодня. Прочитал ваши комментарии и переработал мой ответ, чтобы генерировать ожидаемое поведение на выходе, используя чистое решение для регулярных выражений. Однако IMO это регулярное выражение немного сложное, поскольку для этого требуется ввести в него некоторую логику в соответствии с вопросом OP.
4. @anubhava, понижающий голос удален, поскольку решение теперь соответствует тому, что было задано.
5. @Luka amp; @Gazler: Большое спасибо, рад, что вам обоим понравилось решение. В итоге я потратил пару часов, чтобы разобраться с этим, используя 100% решение на основе регулярных выражений 🙂
Ответ №3:
К сожалению, это невозможно. Не существует простого способа отличить границы слов с одним пробелом от посторонних пробелов между символами слова.
РЕДАКТИРОВАТЬ: Убрано — я предположил, что при замене потребуется правильно обрабатывать (т. Е. Сохранять отдельные) слова, которые на самом деле имеют длину в один символ.
Комментарии:
1. Это возможно. Прочитайте вопрос еще раз, в нем говорится «пробелы между словами из одной буквы»