Замените 2 запятых, разделенных пробелом, пробелом, используя php - PullRequest
0 голосов
/ 07 мая 2018

Привет, друзья, я пытаюсь заменить две запятые, разделенные пробелом, пробелом с помощью php. Вот мой код

Предположим, например, что у меня переменная типа

 $var = "hello, welcome, , , ,"

Использую приведенный ниже код для замены запятых в приведенной выше строке.

 $output = preg_replace('/[,\s]+/', ' ', $var);

Получаю следующий вывод при выполнении вышеуказанного кода

 hello welcome

Требуется вывод

 hello, welcome

Может кто-нибудь помочь мне с кодом выше

Ответы [ 4 ]

0 голосов
/ 07 мая 2018

Шаблон, который вы намереваетесь заменить, представляет собой запятую, за которой следует пробел, за которым следует другая запятая. Итак, соответствующее регулярное выражение: ", \ s," . Это может повторяться любое количество раз, так что это будет "(, \ s,) +" .

Итак, соответствующий код PHP будет выглядеть примерно так:

$var = "hello, welcome, , , ,"
$output = preg_replace('/(,\s,)+/', '', $var);

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

Спасибо @toto за напоминание о том, что этот код работает только для четного числа запятых. Классическая ошибка, заключающаяся в том, что я не брал никаких дополнительных тестовых случаев, чем тот, о котором спрашивал пользователь при тестировании моего кода.

Если вы хотите включить четное и нечетное число запятых, то шаблон, которому вы должны соответствовать: ", (\ s,) +". За запятой следует любое количество пробелов и запятых.

Итак, новый код PHP будет:

$var = "hello, welcome, , , ,"
$replacement = '';
$output = preg_replace('/,(\s,)+/', $replacement, $var);

Если вы хотите просто избавиться от лишних запятых, то сначала обрежьте $ var запятых и присвойте ',' значение $ replace.

Это даст вам аккуратный вывод.

0 голосов
/ 07 мая 2018
preg_replace('/(,\s?)+$/', '', "hello, welcome, , , ,");

В основном, сопоставляйте каждую непрерывную последовательность , до конца строки.

см. https://regex101.com/r/rSp90e/1 для демонстрации.

0 голосов
/ 07 мая 2018

Вы можете попробовать следующее решение:

$var = "hello, welcome, , , ,";

$result = explode(',', $var);

$result = $result[0]. ', '. $result[1];

echo $result;
0 голосов
/ 07 мая 2018

Попробуйте эту опцию:

$var = "hello, welcome, , , , ,";
$output = preg_replace('/,\s(?=[,])|,$/', '', $var);

hello, welcome

Демонстрация

При этом используется предвидение для нацеливания только запятых, за которыми следует пробел изапятую или в конце строки.

...