В чем сила, БРАТ?
С нами с 22.03.05
Сообщения: 749
Рейтинг: 246
|
Добавлено: 10/02/11 в 14:06 |
|
|
|
|
В чем сила, БРАТ?
С нами с 22.03.05
Сообщения: 749
Рейтинг: 246
|
Добавлено: 10/02/11 в 14:18 |
на примерах уточнил задание.
походу регулярками эту проблему не решить. в любом случае всем 4+ пишите еще добавлю)))
Последний раз редактировалось: wdfrretevw (10/02/11 в 14:20), всего редактировалось 1 раз
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 10/02/11 в 14:19 |
моя рега бьет все твои примеры
что еще надо
|
|
|
|
В чем сила, БРАТ?
С нами с 22.03.05
Сообщения: 749
Рейтинг: 246
|
Добавлено: 10/02/11 в 14:22 |
freeek писал: | моя рега бьет все твои примеры
что еще надо |
напиши готовую функцию. на входе шаблон и урл, на выходе кей. проверю отпишусь
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 10/02/11 в 14:32 |
Код: | function getKey( $query )
{
preg_match( '%\?([\w\d]+)(?(?=\=)\=([\w\d]+))%i', $query, $match );
return ( isset($match[2]) ? $match[2] : $match[1] );
}
echo '<pre>';
print_r( getKey('?WW4444444444') );
echo '<pre>';
print_r( getKey('https://www.master-x.com/?blavar=150&shjjf=12') );
|
или
Код: | function getKey( $query )
{
preg_match( '%\?(?(?=[\w\d]+\=)[\d\w]+\=([\d\w]+)|([\d\w]+))%i', $query, $match );
return ( isset($match[2]) ? $match[2] : $match[1] );
}
echo '<pre>';
print_r( getKey('?blavar=35&shjjf=12') );
echo '<pre>';
print_r( getKey('http://domen.com/?WW4444444444') );
|
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 10/02/11 в 14:42 |
щас еще раз пили ?name=key
если наш кей может появиться хуй знает где и как я понял на это самое "хуй знает есть шаблон, то рега не нужна, на первый взляд разовать урл по границе кея в шаблоне
блеать , торопомотрел,
в результате есть одно НО, регу уместо использвать когда тот самый вариант, с ?key или ?name=key
если наш кей может появиться хуй знает где и как я понял на это самое "хуй знает" есть шаблон, то рега не нужна, на первый взляд разовать урл по границе кея в шаблоне
блеать , тороплюсь, времени нет проверять, но если надо так то можно сделать и так
ничего невозможного нет
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 10/02/11 в 14:49 |
Код: | function getKeys( $patter, $string )
{
return str_ireplace( explode( '{key}', $patter ), '', $string );
}
echo '<pre>';
print_r(getKeys('http://domen./?{key}=eeeee&ff=ee&uu=', 'http://domen./?iii=eeeee&ff=ee&uu='));
echo '</pre>'; |
короче вот, условие, что шаблон строго соответсвует той строке где ищем
все убегаю
|
|
|
|
С нами с 03.02.11
Сообщения: 842
Рейтинг: 301
|
Добавлено: 10/02/11 в 17:12 |
на
может кривовато, как для истинных мастеров и любителей классов, функций и регулярок, зато работает.
Код: [развернуть] |
$shablon = array('http://domen.com/?qwe=123&dd={key}&ff=ee',
'http://domen.com/?iii={key}&ff=ee',
'http://domen.com/?aaaa={key}',
'http://domen.com/?{key}');
$url = array('http://domen.com/?dd=WW111111&ff=ee',
'http://domen.com/?iii=WW22&ff=ee',
'http://domen.com/?aaaa=WW33',
'http://domen.com/?WW4444444444');
$k = array();
foreach($shablon as $val) { //собираем шаблоны
preg_match( '~[\?|&]+(\w*=){key}~i', $val, $match );
if(isset($match[1])) {
$k[] = $match[1];
}
}
$res = array();
foreach($url as $u) { //выделяем кеи
if(preg_match('~\?(\w+$)~', $u, $match)) {
$res[] = $match[1];
continue;
}
foreach($k as $sh)
if(preg_match('~[\?|&]+'.$sh.'(\w+)~', $u, $match)) {
$res[] = $match[1]."\r\n";
break;
}
}
echo '<pre>';
print_r($res);
echo '</pre>'; |
|
|
|
|
С нами с 20.02.06
Сообщения: 248
Рейтинг: 366
|
Добавлено: 10/02/11 в 17:40 |
А исходные условия именно такие? Почему именно шаблоны урлов? Нельзя ли как-то поменять условие, например:
вместо шаблона http://domen.com/?qwe=123&dd={key}&ff=ee и урла http://domen.com/?dd=WW111111&ff=ee сказать, что просто надо в данном урле определить значение параметра dd. Это же эквивалентно твоей задаче? Или в другом случае, найти ключ первого параметра (http://domen.com/?WW4444444444). По-моему это более правильная постановка задачи
|
|
|
|
В чем сила, БРАТ?
С нами с 22.03.05
Сообщения: 749
Рейтинг: 246
|
Добавлено: 10/02/11 в 21:23 |
freeek писал: | Код: | function getKeys( $patter, $string )
{
return str_ireplace( explode( '{key}', $patter ), '', $string );
}
echo '<pre>';
print_r(getKeys('http://domen./?{key}=eeeee&ff=ee&uu=', 'http://domen./?iii=eeeee&ff=ee&uu='));
echo '</pre>'; |
короче вот, условие, что шаблон строго соответсвует той строке где ищем
все убегаю |
хорошее решение - но не проверил, щас лень, завтра уже. Всем 4+
САБМИТ. почему именно ДД? глянь внимательно, разные кеи. Да и задача вытащить из строки {key} , а если будет строка например http://domen.com/{key}/index.php то как?
|
|
|
|
В чем сила, БРАТ?
С нами с 22.03.05
Сообщения: 749
Рейтинг: 246
|
Добавлено: 10/02/11 в 21:27 |
еще раз хочу напомнить, решение уже найдено (3 раз уже пишу). Всем кто принял участие моя благодарность.
|
|
|
|
С нами с 03.02.11
Сообщения: 842
Рейтинг: 301
|
Добавлено: 10/02/11 в 22:38 |
если ты про это решение
$itog = substr($url,strrpos($sablon,"{"),-(strlen($sablon)-strrpos($sablon,"}")));
то при перестановке переменных местами выйдет баг.
a=1&b=2 или b=2&a=1
>>(3 раз уже пишу)
ну, вообще-то парой мессаг назад ты говоришь, что уточнил задание,
freeek-у писал: "напиши готовую функцию. на входе шаблон и урл, на выходе кей. проверю отпишусь"...
сорри, что вмешался... удаляюсь... ctrl+alt+del
|
|
|
|
С нами с 16.10.09
Сообщения: 343
Рейтинг: 419
|
Добавлено: 10/02/11 в 23:40 |
ююю
|
|
|
|
С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010
|
Добавлено: 10/02/11 в 23:43 |
freeek писал: | Код: | function getKeys( $patter, $string )
{
return str_ireplace( explode( '{key}', $patter ), '', $string );
}
echo '<pre>';
print_r(getKeys('http://domen./?{key}=eeeee&ff=ee&uu=', 'http://domen./?iii=eeeee&ff=ee&uu='));
echo '</pre>'; |
короче вот, условие, что шаблон строго соответсвует той строке где ищем
все убегаю |
самое правильно решение в топике
|
|
|
|
С нами с 03.02.11
Сообщения: 842
Рейтинг: 301
|
Добавлено: 11/02/11 в 10:08 |
ibiz писал: | самое правильно решение в топике |
если домен с www или без - и уже не работает, ровно как и при перестановке гет-переменных местами... я понимаю, коротко, красиво, но... имхо, не правильно не учитывать разные варианты...
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 11/02/11 в 14:02 |
что значит не работает
все работает, тут надо понимать о чем речь и абстрагироваться от урлов с домена и т.д.
как я понял вопрос в том что нам надо извлечь некий кей из строки
для этой строки существует строго соответствующий ей шаблон,
когда применим мою функцию, получим то что искали
Код: | echo '<pre>';
print_r(getKeys('blablsddvh{key}ehebebeb', 'blablsddvhfuckehebebeb')); |
выведет
|
|
|
|
С нами с 03.02.11
Сообщения: 842
Рейтинг: 301
|
Добавлено: 11/02/11 в 14:52 |
freeek писал: | что значит не работает
все работает, тут надо понимать о чем речь и абстрагироваться от урлов с домена и т.д. |
вопрос был о урлах, а они бывают как с ввв, так и без. гугол бывает как ком, так и фр. и не обязательно, что после ы=кей&з=12 "з" всегда будет 12? а вдруг 24? вылет...
но в рамках жесткого шаблона - да, твое решение изящно
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 11/02/11 в 15:07 |
в том то и дело в рамках жёсткого шаблона, все манипуляции по приведению соответствующего шаблона, должны быть проделаны заранее
отчасти согласен что решение не идеально, а вся проблема в том, что мы ищем черную кошку в черной комнате
невозможно написать ни регу, ни еще что то, не зная того что мы ищем и где мы это будем искать, поэтому отчасти решение с жестким шаблоном нас должно удовлетворить, а все манипуляции с подборкой нужного шаблона проводятся заранее, что уже совсем другая задача
|
|
|
|
С нами с 03.02.09
Сообщения: 139
Рейтинг: 235
|
Добавлено: 12/02/11 в 20:07 |
|
|
|
|
С нами с 20.02.06
Сообщения: 248
Рейтинг: 366
|
Добавлено: 13/02/11 в 21:03 |
iRoot: именно такое решение я и предлодил на предыдущей странице
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 13/02/11 в 21:52 |
нет, не пойдет, потому что ему надо искать его кей не только в строке запроса, а где угодно
т.е. мы не знаем где этот кей будет находиться, нахождение нашего кея упирается в шаблон
не знаю конечно для чего это и где это применяется, но по факту так и есть
|
|
|
|
С нами с 20.02.06
Сообщения: 248
Рейтинг: 366
|
Добавлено: 14/02/11 в 20:38 |
Тогда просто надо составить список символов, из которых может состять кей, и ограничителей.
Не уверен, что эта задача решается в общем случае, либо необходимы уточнения.
ТС, не обращай внимания на то что мы тут пишем. Мы в курсе, что ты уже нашёл решение, у нас просто спортивный интерес
P.S. ну или просто взять шаблон, заменить в нём {key} на (.+?), остальное preg_quote. Ну и в итоге preg_match конечно же
Последний раз редактировалось: CABMIT (14/02/11 в 20:46), всего редактировалось 1 раз
|
|
|
|
С нами с 20.02.06
Сообщения: 248
Рейтинг: 366
|
Добавлено: 14/02/11 в 20:45 |
Код: | function get_key($template, $string)
{
preg_match('/'.str_replace('\{key\}', '(.+?)', preg_quote($template, '/')).'/', $string, $matches);
return isset($matches[1]) ? $matches[1] : false;
}
echo get_key('http://domen.com/?dd={key}&ff=ee', 'http://domen.com/?dd=WW111111&ff=ee'); // -> WW111111 |
Enjoy
|
|
|
|
С нами с 09.10.07
Сообщения: 433
Рейтинг: 321
|
Добавлено: 14/02/11 в 21:24 |
Кстати последний вариант решения _точно_ соотвествует ТЗ ;)
PS Впрочем сам бы я предпочел все таки решение с urlparse, и отдельной обработкой случаев когда {KEY} в пути/домене, или когда {KEY} -- весь query_string (то есть случай domain.com/?{key}) -- будет немного более громоздко, зато более понятно, предсказуемо и поддерживаемо)
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 15/02/11 в 03:23 |
CABMIT писал: | Код: | function get_key($template, $string)
{
preg_match('/'.str_replace('\{key\}', '(.+?)', preg_quote($template, '/')).'/', $string, $matches);
return isset($matches[1]) ? $matches[1] : false;
}
echo get_key('http://domen.com/?dd={key}&ff=ee', 'http://domen.com/?dd=WW111111&ff=ee'); // -> WW111111 |
Enjoy |
да неплохо, только зачем
смысл то не меняется, зачем использовать реги там где можно обойтись без них
логика моей функции простая, кей находиться в том месте, где указана метка в шаблоне
чтоб его извлечь, надо обрезать строку по границам этой метки и мы получим то что искали
в твоем случае, мы ищем вхождение первой подмаски, описывающей метку, под которой лежит сам кей
по сути одно и тоже, ну может чуть чуть помедленнее
|
|
|
|