Как из 46?5&7x20 сделать 46.5x20.7 ?

123 4
P
На сайте с 06.01.2009
Offline
601
1635

Здравствуйте. Вопрос к профи. самому не осилить.

Как преобразовать строку 46?5&7x20 в строку 46.5x20.7

Числа могут быть любые

46?33&12x17 = 46.33x17.12

3?2&55x7 = 3.2x7.55

32?4&2x7 = 32.4x7.2

и т.д.

[umka]
На сайте с 25.05.2008
Offline
456
#1

$str="46?5&7x20";

if (preg_match("/^(\\d+)\\?(\\d+)&(\\d+)x(\\d+)\$/",$str,$r)) {
$str="$r[1].$r[2]x$r[4].$r[3]";
}
echo $str;
Лог в помощь!
M
На сайте с 15.03.2012
Offline
128
#2

$str = preg_replace('/^(\d+)\?(\d+)&(\d+)x(\d+)$/', "$1.$2x$4.$3", $str);

примерно так.. не проверял

ДП
На сайте с 23.11.2009
Offline
203
#3

т.е. у вас всегда формат

число?число&числоxчисло?

и последние два числа менятся местами?

Если так - то например вот так:


$in = "46?33&12x17";

$parts = explode("&",$in);
$last = explode("x",$parts[1]);
$parts[0] = str_replace("?",".",$parts[0]);
$out = $parts[0]."x".$last[1].".".$last[0];

Это код для понимания.

Можно регуляркой:


$out = preg_replace('/(\d+)\?(\d+)&(\d+)x(\d+)/sim', '$1.$2x$4.$3', $in);
P
На сайте с 06.01.2009
Offline
601
#4
Дикий пионер:
т.е. у вас всегда формат
число?число&числоxчисло?

Да. Задача ещё усложняется, так как строка имеет вид

laminat-balter-5?15&15x5-big-32?5&5x32-lap

и строку надо привести в вид

laminat-balter-5,15x5,15-big-32,5x32,5-lap

Спасибо Вам ребята, по крайней мере есть от чего мне отталкиваться. А вообще я ступил, надо было сразу всю строку вам показать. Вы же спецы.

сделал так


$vgg = explode("-", $tekurl);
$slovvgg = count($vgg);
for ($x=0; $x<$slovvgg; $x++) {
$str = $vgg[$x];
if (preg_match("/^(\\d+)\\?(\\d+)&(\\d+)x(\\d+)\$/",$str,$r)) {
$str="$r[1].$r[2]x$r[4].$r[3]";
$vgg[$x] = $str;
}
}
$rightUrl = implode("-", $vgg); // получили итоговую строку
J
На сайте с 20.02.2014
Offline
120
jkm
#5

А это точно не опечатка? В предыдущей теме в логах урлы были другие

postavkin:

Улы

site.ru/tovar/laminat-balterio-kosbi-eco-wood-10,5x90
site.ru/tovar/laminat-balterio-kosbi-eco-wood-20,5x90,5


и вот в логах

/tovar/laminat-balterio-kosbi-eco-wood-10?5x90 HTTP/1.0" 404 4502 "-" "Mozilla/5.0 (compatible; YandexBot/3.0;
/tovar/laminat-balterio-kosbi-eco-wood-20?5x90&,5 HTTP/1.0" 404 4502 "-" "Mozilla/5.0 (compatible; YandexBot/3.0;

т.е. цифры в урле местами не менялись.

P
На сайте с 06.01.2009
Offline
601
#6
jkm:
А это точно не опечатка? В предыдущей теме в логах урлы были другие

т.е. цифры в урле местами не менялись.

Вот блин, сейчас проверять буду. но мне показалось что закономерность только такая. спасибо

---------- Post added 30-10-2014 at 16:56 ----------

Мдя, жесть, есть отклонения.

есть и такие варианты 31?5x94&9 надо в 31,5x94,9

27?46&73x89 нужно преобразовать в 27.73x89.46

а где то он вообще отрезал урл

mix-balter-2,5x2,5-300x300 получил в логах mix-balter-2

Жесткач. Вариантов стало больше. Ребят спасибо на этом, хоть на часть урлов редирект получится сделать.

ps заметил вот что. есть делители строки любой, такого плана 31?5x94&9 это 3 знака ? & x

Если после ? идет & то числа местами надо переставлять, что мы и сделали.

Если после ? идет x то переставлять не надо, просто меняю запятую на точку.

а это в виде исключения из правил

27?46&73x89 нужно преобразовать в 27.73x89.46
ДП
На сайте с 23.11.2009
Offline
203
#7
postavkin:
Да. Задача ещё усложняется, так как строка имеет вид
laminat-balter-5?15&15x5-big-32?5&5x32-lap
и строку надо привести в вид
laminat-balter-5,15x5,15-big-32,5x32,5-lap

Без учета того, что у вас оказались другие начальные условия и варианты перестановок - то вам бы поошло решение с preg_replace - оно буквы не затрагивает, а меняет только цифры и знаки по шаблону.

P
На сайте с 06.01.2009
Offline
601
#8
Дикий пионер:
Без учета того, что у вас оказались другие начальные условия и варианты перестановок - то вам бы поошло решение с preg_replace - оно буквы не затрагивает, а меняет только цифры и знаки по шаблону.

Спасибо. Я сделал на основе того что мне здесь показали. Просто некоторые урлы придется не редиректить, так как ни одно правило для них не работает. Робот яндекса переставляет как хочет или обрезает урл (это вс касается урлов где есть запятая).

---------- Post added 30-10-2014 at 17:25 ----------

Спецы. Очень прошу теперь помочь с редиректом фотографий в .htaccess.

Думаю всё проще, но мне тоже самому не осилить.

photo/balter/ecowood/big/brown-15x50,5.jpg нужно редиректить на photo/balter/ecowood/big/brown-15x50.5.jpg

photo/balter/ecowood/brown-15x50,5.jpg нужно редиректить на photo/balter/ecowood/brown-15x50.5.jpg

J
На сайте с 20.02.2014
Offline
120
jkm
#9

Вставить после RewriteEngine On


RewriteRule ^(photo.+),(\d+\.jpg)$ /$1.$2 [R=301,L]
P
На сайте с 06.01.2009
Offline
601
#10
jkm:
Вставить после RewriteEngine On

RewriteRule ^(photo.+),(\d+\.jpg)$ /$1.$2 [R=301,L]

Ничего не случится с фотографиями без запятой? Их это правило не затронет?

123 4

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий