Пишу скрипт для работы с поисковыми ботами
$browser = "Opera";
}
при этом способе выводиться ошибка:
Warning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash in z:\home\xxx\www\bots.php on line 32
Пробовал ещё таким способом:
$browser = "Opera";
}
Тогда всё проходит без ошибки, но eregi возвращает FALSE.
Помогите пожалуйста составить верное выражение для "выдирания" имени браузера.
Какую лучше использовать функцию: eregi или preg_match?
Тестирую с User-Agent'a: Opera/9.22 (Windows NT 5.1; U; ru)
PS: если скажите, что нужно подобрать рег. выражение, в котором после слова Opera должен стоять символ /, то это будет не верно, потому что User-agent оперы может быть ещё таким: "Opera 9.22".
PPS: нужно составить выражение, которое бы подходило и для других браузеров, т.е. чтоб заменялось только начальное слово User-agent'a (имя браузера) а далее шло рег. выражение.
Заранее спасибо.
Если хочется регулярными выражениями, то пользуйся preg_math().
preg работает с PCRE, поэтому POSIX твой не прокатит.
Тебе подойдёт примерно такое выражение:
[COLOR=blue]/opera|gecko/i[/COLOR]
[COLOR=#0000ff][/COLOR]
это я совсем не понял.
то есть? у меня на денвере под PHPH 4.x.x нормально работает. Им то у меня и получается выдернуть браузер
$browser = "Opera";
}
eregi проходит, возвращает True, как и надо, когда как preg_match не срабатывает
$browser = "Opera";
}
та же ошибка, что и в 1м посте (в цитате там) и возвращает False.
preg, который вы указали не срабатывает:
$browser = "Opera";
}
eregi срабатывает, но возвращает False
поняли-поняли, как раз то что нужно и написали (/opera|gecko/i), но это не работает..
Ну самостоятельностью решил заняться :) А если честно - то не знал. Дайте ссылки пожалуйста на то, про что вы говорите.
----------------
Сейчас возникла другая проблема:
как в регулярном выражении записать символ /?
[/]{1} - такое не срабатывает.
Нужно для применения в таком случае:
$browser = "Opera";
}
не срабатывает, возвращает False
Ну самостоятельностью решил заняться :) А если честно - то не знал.
Все уже давно написано до нас, только не всегда это можно сразу найти. В PHP не юзал ни чего такого, но думаю в гуглей надешь
http://www.google.com/search?ie=UTF-8&hl=ru&q=PHP%20%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B0
, а на JS есть Mootools.
Сейчас возникла другая проблема:
как в регулярном выражении записать символ /?
http://www.php.net/manual/ru/reference.pcre.pattern.syntax.php
В регулярном выражении у этого слеша нет специального значения. Проблемы могут возникнуть когда используешь его как ограничитель шаблона. Тут выхода 2: 1) экранировать этот слеш обратным слешем, т.е. \/ 2) для ограничения шаблона используй другие символы, как то | ... | или {...} в общем пар много.
Большое спасибо, посмотрю, но думаю, полностью под себя заимствовать не буду, ибо уже почти всё сам реализовал.
---------------------
Сейчас не могу разобраться как нужно употребить [:space:], чтоб всё нормально работало... Ткните плиз, как правильно будет, а то я уже замучился подбирать:
Пример не сложный, поэтому прошу не давать ссылки на мануалы, а ткуть, так как будет работать. А то уже глаза болят.. весь вечер изучаю RegExp
Пример не сложный, поэтому прошу не давать ссылки на мануалы, а ткуть, так как будет работать.
Пример действительно не сложный. Насчет ссылок, хм... давали и давать будет, это ветка форума не для стедудентов, тут "напишиме мне" не приветсвуется.
И потом быть может я бы и написал (быть может), но не очень понятно, что ты пытаешься такой регуляркой реализовать. Что ищем то?
Ну и? Уже два с половиной года всё человечество активно использует PHP 5.x.x. И ereg в нём является аттавизмом, который очень скоро совсем не будет использоваться. Иначе говоря, всё, что ты сейчас напишешь, вероятно через год не станет работать на хостинге.
Просто есть браузеры Opera и Opera Mini и я не хочу, чтоб опера мини определялась, как опера, поэтому и нужно такое выражение (с пробелом между словами).
:( плохо.. а почему тогда выходит ошибка, когда я использую preg_match? всё правильно, вроде, делаю, а такая оплошность :((
-------------------------
Почему не срабатывает выражение:
тогда, как
работает нормально. Что нужно сделать, чтоб 1й пример стал "перевариваться" пхп? Я там, наверно, допускаю ошибку, только какую?
Логическую.
Задумайся, что у тебя возращает конструкция "gogle" or "googl".
Ох, как же все не то мутишь. Все элементарно:
$pattern = "/(Opera\sMini)/iu";
$subject = 'тут что то Opera Mini еще какие то символы';
$subject1 = 'тут что то Opera еще какие то символы';
$regExp = preg_match($pattern,$subject);
var_dump($regExp);
echo '<br>';
$regExp = preg_match($pattern,$subject1);
var_dump($regExp);
?>
Я тебе не зря отсылаю ман курить, если бы удосижился его прочесть, то вопроса бы о кодировании символа пробела не возник бы.
RTFM, RTFM и снова RTFM!!!!!!
если в $namesbot = этим выражениям, то TRUE (или я ошибаюсь?). Просто в $namesbot присваивается значение 5 первых сиволов из User-agent'a. Мне просто нужно упростить ту конструкцию, чтоб не использовать пример №2.
-------------------------
Вопрос, наверно, не в тему, да и не в соответствующий раздел, но: где можно взять описание агентов: Гугла, Мэйла, Рамблера, Яхо, Апорта, ВебАльты, МСНа? Нужно их точные User-Agent'ы и описание для каждого (кто, что делает. Например, как для яши тут)
[HTML]
int(0)
int(0)
[/HTML]
сейчас прочтём-с :)
[HTML]
int(0)
int(0)
[/HTML]
Так у тебя же PHP левый! :D
У меня как и положено:
[HTML]
int(1)
int(0)
[/HTML]
Хм... PHP, что и с денвером идет.. Странно
/me озадачен вопросом: "будет ли работать весь мой скрипт на хостинге, при таком раскладе?"
Блин... сколько уже раз говОренно, что денвер зло особо в самом начале. Проставь Апач и пых как это описывают через статьи, т.е. апач ставь через инсталлер скачаный с офсайта (лучше 2.0.х) + берем просто архив с PHP и копируем его в папку апача.
---------------------
Вопрос насчет апача. В стандартной комплектации вышесказанного апача возможно создание виртуальных сайтов "на лету"? Т.е., как в денвере: создал папку, перегрузил сервер - виртуалка создана.
Смотря что подразумевать под "на лету". Кофиг апача это обычный текстовой файл, причем во время работы оного он ни как не блокируется. Вирутальные сервера перечесляются в секции 3 этого файла. К апачу есть команды "мягкого" перезапуска, когда файл конфига перечитывается без перезагрузки сервера.
Выводы делай сам.
Я делаю так:
$fileseek = fseek($filelastsbots, 0, SEEK_END); // ставлю на последнюю строку
$filetell = ftell($filelastsbots); // считываю количество сиволов
$filenumrow = $filetell/17; // делю на 17; нужно, чтоб узнать количество строк (по 17 сиволов в строке, считая \n)
$filenumrowmo = $filenumrow-1; // присваиваю переменной значение "последняя строка-1 строка"
Какой функцией дальше установить позицию указателя?
На http://www.php.net/manual/ru/index.php Почему то не заходит :(
Я сделал функцией file()