Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: помогите с preg_replace
Форумы портала PHP.SU » PHP » Программирование на PHP » помогите с preg_replace

Страниц (1): [1]
 

1. Arch-Web - 06 Ноября, 2010 - 14:07:54 - перейти к сообщению
Столкнулся с стакой проблемой

есть такая строка:
Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.6.30 Version/10.63

мне надо вытянуть версию
и записать в $os вот так:
Windows.NT.5.1

Делаю вот так:
$os = preg_replace( "/\(Windows ([NT]+) ([0-9.]+)\;/is", "Windows.\\1.\\2", $useragent );

но выводит вот это:
Opera/9.80 Windows.NT.5.1 U; ru) Presto/2.6.30 Version/10.63
2. vitaliy_mad - 06 Ноября, 2010 - 14:15:04 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. preg_match('/\((.+);/U','Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.6.30 Version/10.63',$m);
  2. $os=preg_replace('\s','.',$m[1]);
3. Arch-Web - 06 Ноября, 2010 - 14:51:15 - перейти к сообщению
Спасибо за пример.
Но мне надо вытянуть не все что там есть а отдельно Windows потом NT и потом версию
делаю вот так
PHP:
скопировать код в буфер обмена
  1. preg_match('/\(([Windows]+) ([NT]+) ([0-9\.]+)\;/',$useragent,$this->Os);
  2. print_r($this->Os);


выводит:
Array ( )


п.с еще такой вопрос, что даеот такой текст в конце: s или is или i а то не могу найти что оно означает
п.с2 и чем отличается "/ /" и "# #"
4. vitaliy_mad - 06 Ноября, 2010 - 14:53:29 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. preg_match('/\((.+);/U','Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.6.30 Version/10.63',$m);
  2. $os=explode(' ',$m[1]);
  3. print_r($os);


Посмотрите что так выводит
(Добавление)
Цитата:
п.с еще такой вопрос, что даеот такой текст в конце: s или is или i а то не могу найти что оно означает
это модификаторы. i - регистронезависимость, s - если нен ошибаюсь, многострочность...
Цитата:
п.с2 и чем отличается "/ /" и "# #"
ничем. просто рахные разхделители выражения
5. Arch-Web - 06 Ноября, 2010 - 15:08:14 - перейти к сообщению
эм...

я же говорю что мне не надо вытаскивать весь текст который есть тут " (Windows NT 5.1; "

мне надо вытащить все по отдельности

тоисть сначало Windows потом NT и потом версию в таком формате [0-9\.]

и к примеру если там будет не Windows а что-то другое то функция не должна вытаскивать то что место текста Windows

и в array запишется только NT и версия
6. vitaliy_mad - 06 Ноября, 2010 - 15:11:22 - перейти к сообщению
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. preg_match('/\(([Windows]+) ([NT]+) ([0-9\.]+)\;/','Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.6.30 Version/10.63',$m);
  3. print_r($m);
  4. (
  5.     [0] => (Windows NT 5.1;
  6.     [1] => Windows
  7.     [2] => NT
  8.     [3] => 5.1
  9. )
  10.  
7. Arch-Web - 06 Ноября, 2010 - 15:14:09 - перейти к сообщению
Огромное вам спасибо
8. vitaliy_mad - 06 Ноября, 2010 - 15:15:13 - перейти к сообщению
вообщето последний вариант - это ваша конструкция.... почему она у вас не работала? кто знает...
9. Саныч - 06 Ноября, 2010 - 21:18:56 - перейти к сообщению
А не чего, что в квадратных скобках идет перечисление и под вашу регулярку может попасть любое слово? Хм
10. OrmaJever - 06 Ноября, 2010 - 21:22:48 - перейти к сообщению
Может не по теме но толку мало брать версию. Все последние версии оперы определяет как 9.80 Подмигивание
11. Саныч - 06 Ноября, 2010 - 21:30:34 - перейти к сообщению
Ну почему же 9.80? В самом конце строки Version/10.63... Вот она и версия, и везде разная)

 

Powered by ExBB FM 1.0 RC1