Достала рега, не хочит быть универсальной!!!

jeka!

Просто Member
Достала рега, не хочит быть универсальной!!!

В общем пишу регу, которая должна вырезать из урл кейворд, но т.к у разных поисковиков урлы разные, и даже разные у конкретных, надо найти приемлимый вариант для всех типов.
Вот пример яндекса:
PHP:
$prefix = "text=|r=|words=|p=|query=|q=|text";
if (preg_match("/^.+\\:\\/\\/([^\\/]+)\\/.*?(?:\\?|&)(?:".$prefix.")([^&]+)&?/i", $sp[4], $array)){
print ("<pre>");
print_r($array);
print ("</pre>");
}
Печатает при таком урле:
PHP:
h\t\t\p://\w\w\w.yandex.ru/yandsearch?text=%C0%ED%E5%EA%E4%EE%F2%FB+%EF%F0%EE+%E0%F0%EC%E8%FE

Array
(
    [0] => h\t\t\p://w\w\w.yandex.ru/yandsearch?text=%C0%ED%E5%EA%E4%EE%F2%FB+%EF%F0%EE+%E0%F0%EC%E8%FE

    [1] => \w\w\w.yandex.ru
    [2] => %C0%ED%E5%EA%E4%EE%F2%FB+%EF%F0%EE+%E0%F0%EC%E8%FE

)
А при таком:
PHP:
h\t\t\p://\w\w\w.yandex.ru/yandpage?q=1338790505&p=3&ag=h&qs=text%3D%25de%25c1%25d3%25d4%25ce%25d9%25c5%2520%25c6%25cf%25d4%25cf%26rpt%3D

Array
(
    [0] => h\t\t\p://\w\w\w.yandex.ru/yandpage?q=1338790505&p=3&
    [1] => \w\w\w.yandex.ru
    [2] => 1338790505
)
Но мне надо найти 2 значение...
А если поправить $prefix, тогда будут глюки с другими поисковиками....
Пробовал добавлять в необязательном параметре ещё варианты, но тогда белиберда получается....
 

ForJest

- свежая кровь
А что тебе собственно мешает определить массив регов?
 

jeka!

Просто Member
Да ничего, у меня сейчас так и сделано, просто хочу сделать 1 универсальную.
 

ForJest

- свежая кровь
Ну так вперед! Только реги нужно будет выучить сначала. Чтобы понять - возможно это или нет.
А когда ты напишешь свою супер-пупер униваерсальную регу я на неё посмотрю и скажу - и зачем так было извращаться? Можно же было сделать это просто массивами регов....
 

jeka!

Просто Member
Ну, что сделаешь, прикол у меня такой, люблю когда всё минимизировано.
Может по этому я скрипты пишу очень-очень долго...
 

ForJest

- свежая кровь
А представь, что будет, если вдруг по чьей-то злой воле вдруг измениться формат для какого-то поисковика? И как тебе придется заморочиться чтобы пофиксить свою выстраданную регу...
Минимизация кода и метод спагетти - это мода EC-ЭВМ. Сейчас мода на модульность :)
 

Silent

Новичок
jeka! Это не тот случай, когда нужна универсальность. Даже если ты и напишешь универсальный регэксп, он будет работать медленнее десятка простых регэкспов, а его поддержка превратится в кошмар.
 

jeka!

Просто Member
Ладно уговорили, буду мыслить иначе, может быть...
 

Flying

Guest
а зачем regexp? разве нельзя использовать parse_url(), получить там query string, затем натравить на него parse_str() - получить список параметров и просто смотреть на параметр с заранее известным именем, заданным для каждого поисковика.
 
Сверху