SEO Сообщество: Спрашивайте и помогайте

Присоединяйтесь к сообществу профессиональных веб-мастеров PR-CY, отвечайте на вопросы коллег и задавайте свои.

Q&A SEO

Удалить пробелы между цифрами, разделёнными запятой или точкой

TAPAKAH TAPAKAH  
45
  02.03.2019 22:37       733    
Буэнос диас, сеньоры и сеньориты!

У меня возник вопрос о том, как составить регулярное выражение, чтобы решить задачу:
в тексте удалить пробелы только между цифрами, разделёнными запятой или точкой.

Пример:
Шпага продаётся за 629,  56 руб. в магазине у дона Педро.
или
Шпага продаётся за 629.  56 руб. в магазине у дона Педро.

Результат:
Шпага продаётся за 629,56 руб. в магазине у дона Педро.
и, соответственно
Шпага продаётся за 629.56 руб. в магазине у дона Педро.

Как должно выглядеть выражение
$text = str_replace(?????????????????????????, $text);

Ответы на пост (12) Написать ответ
TAPAKAH TAPAKAH
45
03.03.2019 12:57
$pattern = "/(\d+),\s+(\d+)/i";
$replacement = "$1,$2";
$text = preg_replace($pattern, $replacement, $text);

$pattern = "/(\d+)\.\s+(\d+)/i";
$replacement = "$1.$2";
$text = preg_replace($pattern, $replacement, $text);


Вот это работает отлично!
Снимаю шляпу, господа!
Спасибо большое!!!
0
Решение
Funs Funs
175
02.03.2019 23:21
Вроде так:
$text = str_replace(', ', '.', $text);
0
TAPAKAH TAPAKAH
45
02.03.2019 23:50
Заменяет везде по тексту, где есть запятая с пробелом на точку.

Мне надо производить замену только между числами (между цифрами)!
0
TAPAKAH TAPAKAH
45
02.03.2019 23:51
Либо отменить в данном регулярном выражении добавление пробела между числами (цифрами), разделёнными точкой или запятой:
$text = preg_replace('/([^\s]?)\s?([.,?!:;])\s?([^\s]?)/u', "\$1\$2 \$3", $text);
0
TAPAKAH TAPAKAH
45
03.03.2019 01:12
Решение для запятой нашёл:

$text = preg_replace('[,\\s(?=\d)]',',', preg_replace('[(?<=\d)\s]', '', $text));

Как быть с точкой?
0
TAPAKAH TAPAKAH
45
03.03.2019 01:41
Точнее так:

$text = preg_replace('[\s,(?=\d)]', ',', preg_replace('[(?<=\d),\s]', ',', $text));
0
v3663 v3663
399
03.03.2019 05:06
ох давно я не брал в руки шашек ...
что-то такое приходит на ум
$text = "Шпага продаётся за 629, 56 руб. в магазине у дона Педро. Шпага продаётся за 629. 56 руб. в магазине у дона Педро.";

$pattern = "/(\d+),\s+(\d+)/i";
$replacement = "\${1},\${2}";
$text = preg_replace($pattern, $replacement, $text);

$pattern = "/(\d+)\.\s+(\d+)/i";
$replacement = "\${1}\.\${2}";
$text = preg_replace($pattern, $replacement, $text);
попробуйте, может подойдёт
0
v3663 v3663
399
03.03.2019 05:09
или без фигурных скобок

$pattern = "/(\d+),\s+(\d+)/i";
$replacement = "\$1,\$2";
$text = preg_replace($pattern, $replacement, $text);

$pattern = "/(\d+)\.\s+(\d+)/i";
$replacement = "\$1\.\$2";
$text = preg_replace($pattern, $replacement, $text);

0
v3663 v3663
399
03.03.2019 05:10
не помню
0
vklimin vklimin
480
03.03.2019 12:36
$replacement = "$1.$2";
0
TAPAKAH TAPAKAH
45
03.03.2019 13:08
Кстати, решил ещё на сайте заменить некрасивые " кавычки (на мой взгляд) на более привлекательные ёлочки.
У меня " кавычки выводятся как &quot;
Долго морочился.
Так как очень много текста попадается с разными вариациями ошибок, например:
ООО " Аленький цветочек"
ООО" Аленький цветочек "
ООО "Аленький цветочек "
ООО "ТД" Аленький цветочек"
и т.д. и т.п.

Перепробовал множество вариантов регулярных выражений, в том числе и на этом, предлагающий выход когда требуется вывод вот такой конструкции:
«ТД «Авангард»

$datatext=preg_replace_callback(
'#(([\"]{2,})|(?![^\W])(\"))|([^\s][\"]+(?![\w]))#u',
function ($matches) {
if (count($matches)===3) return "«»";
else if ($matches[1]) return str_replace('"',"«",$matches[1]);
else return str_replace('"',"»",$matches[4]);
},
$datatext
);




но остановился на этом, своём изобретении:

$text = preg_replace("/([^\s>])\&quot;/s","$1»", preg_replace("/\&quot;([^\s])/s","«$1", $text));
$text = preg_replace("/([^\s>])\s\&quot;/s","$1»", preg_replace("/\&quot;\s([^\s])/s","«$1", $text));

Вроде работает...
0
TAPAKAH TAPAKAH
45
03.03.2019 13:45
Сейчас нашёл ошибку.
Немного переделал, но ошибка вылезла в другом месте.

ххх = preg_replace("/\&quot;([^\s])/s", "«$1", preg_replace("/([^\s>])\&quot;/s","$1»", ххх));
ххх= preg_replace("/\&quot;\s([^\s])/s", "«$1", preg_replace("/([^\s>])\s\&quot;/s","$1»", ххх));
0