Реклама на сайте Advertise with us

Регулярные выражения. Вопрос к знатокам (отредактировал)

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

В чем сила, БРАТ?

С нами с 22.03.05
Сообщения: 749
Рейтинг: 246

Ссылка на сообщениеДобавлено: 09/02/11 в 19:39       Ответить с цитатойцитата 

Есть шаблон урла вида
http://domen.com/?dd={key}&ff=ee
и есть сам урл
http://domen.com/?dd=11111111&ff=ee
Вопрос, как можно бысто и просто вытащить {key} тоесть чтоб получить 1111111
__________________________________
уточнил задание
на входе есть шаблоны и урлы
ШАБЛОНЫ
http://domen.com/?dd={key}&ff=ee
http://domen.com/?iii={key}&ff=ee
http://domen.com/?iii=eeeee&ff=ee&uu={key}
http://domen.com/?aaaa={key}
http://domen.com/?{key}
http://domen.com/?iii=eeeee&ff={key}&uu=ddddd

УРЛЫ
http://domen.com/?dd=WW111111&ff=ee
http://domen.com/?iii=WW22&ff=ee
http://domen.com/?iii=eeeee&ff=ee&uu=WWWWW5555
http://domen.com/?aaaa=WW33
http://domen.com/?WW4444444444
http://domen.com/?iii=eeeee&ff=WWWW6666&uu=ddddd

На выходе должно быть (код на ПХП)
WW111111
WW22
WWWWW5555
WW33
WW4444444444
WWWW6666

Последний раз редактировалось: wdfrretevw (10/02/11 в 14:17), всего редактировалось 4 раз(а)

Да я здесь...

0
 



С нами с 22.08.05
Сообщения: 530
Рейтинг: 801

Ссылка на сообщениеДобавлено: 09/02/11 в 19:50       Ответить с цитатойцитата 

если цифр нигде больше нет то
^.+([0-9]+).+$

4
 

В чем сила, БРАТ?

С нами с 22.03.05
Сообщения: 749
Рейтинг: 246

Ссылка на сообщениеДобавлено: 09/02/11 в 20:02       Ответить с цитатойцитата 

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

Да я здесь...

0
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 09/02/11 в 20:11       Ответить с цитатойцитата 

проще через
parse_url + explode('&', $url);

4
 

В чем сила, БРАТ?

С нами с 22.03.05
Сообщения: 749
Рейтинг: 246

Ссылка на сообщениеДобавлено: 09/02/11 в 20:18       Ответить с цитатойцитата 

нет тоже не то, нашел простое решение
$itog = substr($url,strrpos($sablon,"{"),-(strlen($sablon)-strrpos($sablon,"}")));

Да я здесь...

0
 



С нами с 05.04.07
Сообщения: 1661
Рейтинг: 1090


Передовик Master-X (01.04.2011)
Ссылка на сообщениеДобавлено: 09/02/11 в 20:29       Ответить с цитатойцитата 

ну на питоне как то так можно сделать
result=url[url.find('=')+1:url.rfind('&')]

True хостинг

4
 

.:GLX Group:.

С нами с 17.05.07
Сообщения: 693
Рейтинг: 752

Ссылка на сообщениеДобавлено: 09/02/11 в 20:32       Ответить с цитатойцитата 

фига се простое icon_smile.gif
Код: [развернуть]

4
 



С нами с 09.10.07
Сообщения: 433
Рейтинг: 321

Ссылка на сообщениеДобавлено: 09/02/11 в 22:05       Ответить с цитатойцитата 

taj писал:
ну на питоне как то так можно сделать
result=url[url.find('=')+1:url.rfind('&')]


на питоне это делается както так
Код:

>>> import urlparse
>>> url="http://example.com/?param=42&blabla=preved"
>>> urlparse.parse_qs(urlparse.urlparse(url).query).get('param', ["default_value"])[0]
'42'

4
 



С нами с 05.04.07
Сообщения: 1661
Рейтинг: 1090


Передовик Master-X (01.04.2011)
Ссылка на сообщениеДобавлено: 09/02/11 в 22:24       Ответить с цитатойцитата 

И ещё 3мя десятками способов smail54.gif
Тащить целый пакерт чтобы разобрать конкретный пример? просто не мой метод icon_rolleyes.gif
Peace)

True хостинг

0
 

В чем сила, БРАТ?

С нами с 22.03.05
Сообщения: 749
Рейтинг: 246

Ссылка на сообщениеДобавлено: 09/02/11 в 22:47       Ответить с цитатойцитата 

Все не правильно, вы придеживаетесь конкретно этого примера, но он придедет только для ПРИМЕРА. переменые могут быть разные, и {key} может находится в любой части адреса. Если все было бы как в примере и проблемы не возникло.
Шаблоны могут быть
http://domen.com/?dd={key}&ff=ee
http://domen.com/?iii={key}&ff=ee
http://domen.com/?aaaa={key}
http://domen.com/?{key}

Ну и соответствено урлы такие

http://domen.com/?dd=WW1&ff=ee
http://domen.com/?iii=WW2&ff=ee
http://domen.com/?aaaa=WW3
http://domen.com/?WW4

WW1-4 могут принимать разные цифробуквеные значения. Задача стаяла по шаблону вытащить эти WW1-4. Вроде как сейчас понятно объяснил.

решение что привел выше пришлось доработать, не срабатывало, если {key} в конце

if(!$end = strrpos($sablon,"}")+1-strlen($sablon))$end = strlen($url);
$itog = substr($url,strrpos($lin,"{")),$end)

Да я здесь...

0
 



С нами с 20.02.06
Сообщения: 248
Рейтинг: 366

Ссылка на сообщениеДобавлено: 10/02/11 в 02:32       Ответить с цитатойцитата 

Цитата:
Вопрос, как можно бысто и просто вытащить {key} тоесть чтоб получить 1111111

Нихрена не понятно. Откуда надо вытащить - из шаблона {key} или из готового урла параметр?

4
 



С нами с 07.10.01
Сообщения: 4835
Рейтинг: 3672


Передовик Master-X (16.06.2008)
Ссылка на сообщениеДобавлено: 10/02/11 в 02:45       Ответить с цитатойцитата 

Да уж, задание сформулировано красиво icon_smile.gif
Ничего не понять.

Лучшие в Рунете: товарная партнёрка - от 4 рублей за клик.
CPA агрегатор - тысячи отличных офферов!

4
 

php

С нами с 09.10.06
Сообщения: 3706
Рейтинг: 2410


Передовик Master-X (16.01.2010)
Ссылка на сообщениеДобавлено: 10/02/11 в 08:26       Ответить с цитатойцитата 

ну если из выше показаного примера вытащит единицы то можно например и так
Код:
\?dd=(.*)\&

IPhosters.com - любые решения для Вас (виртуалы от $4.99, vps от $11.99, дедики от $95)

4
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 10/02/11 в 11:05       Ответить с цитатойцитата 

уточни условие, кей появляется самым первым, после домена?

4
 



С нами с 05.04.07
Сообщения: 1661
Рейтинг: 1090


Передовик Master-X (01.04.2011)
Ссылка на сообщениеДобавлено: 10/02/11 в 11:21       Ответить с цитатойцитата 

kodek писал:
Да уж, задание сформулировано красиво icon_smile.gif
Ничего не понять.
Вот с такими заказчиками и приходиться часто иметь дело.
Какой пример показал, для такого и подсказали. Телепатов как выяснилось тут нет )


По сабжу:
Код: [развернуть]


Пропускаешь урл через фильтр предложенный мной, он отсеит первые 2 варианта, потом проверка на 3 вариант, и потом уже на 4ой. Как то так, например:
Код: [развернуть]

True хостинг

4
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 10/02/11 в 11:39       Ответить с цитатойцитата 

че то не посмотрел, на аком яп надо было, но регу одельно вынес

Код:

//---------------------регулярное выражение
  $regex = '%\?([\w\d]+)(?(?=\=)\=([\w\d]+))%is';
  $regex2 = '%\?([\w\d]+)(?(?=\=)\=([\w\d]+))%i';
//---------------------
//---------------------пример 1й
  $str = 'http://domen.com/?dd=WW1&ff=ee
http://domen.com/?iii=WW2&ff=ee
http://domen.com/?aaaaWW3ggsa&dsa=1
http://domen.com/?WW4';
  preg_match_all( $regex, $str, $match, PREG_SET_ORDER );
  $keyArray = array();
  foreach ( $match as $set ) {
      $keyArray[] = ( isset($set[2]) ? $set[2] : $set[1] );
  }
  echo '<pre>';
  print_r( $keyArray );
//---------------------
//---------------------пример 2й
  $str = 'https://www.master-x.com/?blamykey';
  preg_match( $regex, $str, $match );
  $key = ( isset($match[2]) ? $match[2] : $match[1] );
  echo '<pre>';
  print_r( $key );
//---------------------
//---------------------пример 3й
  $str = 'https://www.master-x.com/?blavar=heremykey&other=blavars&etc';
  preg_match( $regex2, $str, $match );
  $key = ( isset($match[2]) ? $match[2] : $match[1] ); 
  echo '<pre>';
  print_r( $key );
//---------------------


получается, если захвачена 2я подмаска, то значит она, иначе это 1я

4
 

В чем сила, БРАТ?

С нами с 22.03.05
Сообщения: 749
Рейтинг: 246

Ссылка на сообщениеДобавлено: 10/02/11 в 13:32       Ответить с цитатойцитата 

_s_[sov] писал:
ну если из выше показаного примера вытащит единицы то можно например и так
Код:
\?dd=(.*)\&

это не сработает, нужна таблкетка от жадности
Код:
\?dd=(.*?)\&
[/quote]

Да я здесь...

0
 

В чем сила, БРАТ?

С нами с 22.03.05
Сообщения: 749
Рейтинг: 246

Ссылка на сообщениеДобавлено: 10/02/11 в 13:38       Ответить с цитатойцитата 

CABMIT писал:
Нихрена не понятно. Откуда надо вытащить - из шаблона {key} или из готового урла параметр?

нужно из УРЛ по шаблону выташить - строку. тесть все то что в {key}. надо наложить - отсечь лишнее из урл, оставить только подходит под кей. незнаю как еще объяснить

Да я здесь...

0
 



С нами с 20.02.06
Сообщения: 248
Рейтинг: 366

Ссылка на сообщениеДобавлено: 10/02/11 в 13:38       Ответить с цитатойцитата 

ТС, ты можешь чётко и ясно сформулировать задачу? Что есть на входе и что должно получиться на выходе? Чётко сформулированная задача - это уже половина решения. Я уверен, что задача тут на 10 секунд, но просто люди не могут понять что ты хочешь icon_confused.gif

4
 

В чем сила, БРАТ?

С нами с 22.03.05
Сообщения: 749
Рейтинг: 246

Ссылка на сообщениеДобавлено: 10/02/11 в 13:40       Ответить с цитатойцитата 

freeek писал:
че то не посмотрел, на аком яп надо было, но регу одельно вынес
Код:

//---------------------регулярное выражение
  $regex = '%\?([\w\d]+)(?(?=\=)\=([\w\d]+))%is';
  $regex2 = '%\?([\w\d]+)(?(?=\=)\=([\w\d]+))%i';
//---------------------
//---------------------пример 1й
  $str = 'http://domen.com/?dd=WW1&ff=ee
http://domen.com/?iii=WW2&ff=ee
http://domen.com/?aaaaWW3ggsa&dsa=1
http://domen.com/?WW4';
  preg_match_all( $regex, $str, $match, PREG_SET_ORDER );
  $keyArray = array();
  foreach ( $match as $set ) {
      $keyArray[] = ( isset($set[2]) ? $set[2] : $set[1] );
  }
  echo '<pre>';
  print_r( $keyArray );
//---------------------
//---------------------пример 2й
  $str = 'https://www.master-x.com/?blamykey';
  preg_match( $regex, $str, $match );
  $key = ( isset($match[2]) ? $match[2] : $match[1] );
  echo '<pre>';
  print_r( $key );
//---------------------
//---------------------пример 3й
  $str = 'https://www.master-x.com/?blavar=heremykey&other=blavars&etc';
  preg_match( $regex2, $str, $match );
  $key = ( isset($match[2]) ? $match[2] : $match[1] ); 
  echo '<pre>';
  print_r( $key );
//---------------------

получается, если захвачена 2я подмаска, то значит она, иначе это 1я


это слишком сложно, я же писал, вот такое решение придумал 2 строчки
Код:

if(!$end = strrpos($sablon,"}")+1-strlen($sablon))$end = strlen($url);
$itog = substr($url,strrpos($lin,"{")),$end)

Да я здесь...

0
 

В чем сила, БРАТ?

С нами с 22.03.05
Сообщения: 749
Рейтинг: 246

Ссылка на сообщениеДобавлено: 10/02/11 в 13:42       Ответить с цитатойцитата 

freeek писал:
уточни условие, кей появляется самым первым, после домена?

да в любом месте и после домена, и в середине и в конце, в этом то вся и загвозка. Всем рейтинг))))

Да я здесь...

0
 



С нами с 20.02.06
Сообщения: 248
Рейтинг: 366

Ссылка на сообщениеДобавлено: 10/02/11 в 13:45       Ответить с цитатойцитата 

ИМХО регуляркой проще, что-то типа
Код:
/dd=(.+?)&?/

где вместо dd= подставляешь нужный параметр
Ну или через parse_str как было сказано выше
Код:

$string = 'http://domen.com/?dd=WW1&ff=ee';
parse_str(parse_url($string, PHP_URL_QUERY), $result);
echo $result['dd'];


Последний раз редактировалось: CABMIT (10/02/11 в 13:56), всего редактировалось 2 раз(а)

4
 



С нами с 05.04.07
Сообщения: 1661
Рейтинг: 1090


Передовик Master-X (01.04.2011)
Ссылка на сообщениеДобавлено: 10/02/11 в 13:45       Ответить с цитатойцитата 

Перепеши предложенный мной вариант на strpos и substr и будет тебе счастье)

True хостинг

4
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 10/02/11 в 13:54       Ответить с цитатойцитата 

Код:
'%\?([\w\d]+)(?(?=\=)\=([\w\d]+))%i'


а что сложного в этой реге? подмаска + условная подмаска
если у нас кей гуляет и может быть и там, и там, проще исползовать ее и и смотреть где проявился наш кей

либо в 2й либо в 1й


+ у нас же условие, что мы не знаем как будет называться наш ключ
в случае кода
Код:
?somename=somekey

и тем более
Код:
?somekey


показан сам принцип, а ограничения можно наложить уже в зависимости от своих предпочтений

4
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 10/02/11 в 14:04       Ответить с цитатойцитата 

Код:
'%\?(?(?=[\w\d]+\=)[\d\w]+\=([\d\w]+)|([\d\w]+))%i'


либо вообще вот так,

смотрим где появился, а появиться либо в 1м, либо во 2м

4
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »