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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите с регуляркой

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Собственно проблема проста не могу допереть
Djin_dj
Отправлено: 02 Декабря, 2009 - 13:32:40
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Июнь 2008  
Откуда: Россия


Помог: 0 раз(а)




Есть <?xml version="1.0" encoding="windows-1251" ?>
<ServiceProvider_Request>
<Version>1</Version>
<RequestType>ServiceInfo</RequestType>
<DateTime>20090124153456</DateTime>
<PersonalAccount>123</PersonalAccount>
<Currency>974</Currency>
</ServiceProvider_Request>

надо удалить <?xml version="1.0" encoding="windows-1251" ?> и все передается в переменную строчную
не допираю как найти <?xml могу через preg_match - удалить содержимое нет
 
 Top
movEAX
Отправлено: 02 Декабря, 2009 - 13:54:52
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


Помог: 16 раз(а)




PHP:
скопировать код в буфер обмена
  1. $haystack = preg_replace('!^<\?.+\?>\s*!','', $haystack);

Попробуй это.

(Отредактировано автором: 02 Декабря, 2009 - 14:05:29)



-----
армия.. самое убогое место
 
 Top
Champion Супермодератор
Отправлено: 02 Декабря, 2009 - 13:55:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




/\<\?xml[^>]+\?\>/i
 
 Top
movEAX
Отправлено: 02 Декабря, 2009 - 13:58:07
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


Помог: 16 раз(а)




Champion пишет:
/\<\?xml[^>]+\?\>/i


А зачем экранировать < и > ? Не понял


-----
армия.. самое убогое место
 
 Top
Phantik
Отправлено: 02 Декабря, 2009 - 13:59:06
Post Id


Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Июнь 2009  


Помог: 0 раз(а)




Видимо регулярка для поиска будет выглядеть как - то так:
/^<\?xml\sversion="1\.0"\sencoding="windows-1251"\s\?>$/
 
 Top
Champion Супермодератор
Отправлено: 02 Декабря, 2009 - 14:09:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




movEAX это не повредит. Они иногда выполняют специальные функции. Эдесь можно и не экранировать.

Phantik если бы нужно было найти точно такую строку, то можно и без регулярок str_replace обойтись.
 
 Top
Djin_dj
Отправлено: 02 Декабря, 2009 - 14:26:28
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Июнь 2008  
Откуда: Россия


Помог: 0 раз(а)




Подошла регулярка movEAX, другие не юзал, str_replace не прокатывает потому что при переводе из POST массива символы " и ' экранируются а может и нет, и я не знаю какие ковычки придут, но всем спасибо!
 
 Top
movEAX
Отправлено: 02 Декабря, 2009 - 14:37:29
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


Помог: 16 раз(а)




Champion пишет:
movEAX это не повредит. Они иногда выполняют специальные функции. Эдесь можно и не экранировать.


Я знаю только несколько случаев когда они используются:
- (?<= - утверждение
- (?<! - утверждение
- (?> - однократная подмаска

Где еще? ))


-----
армия.. самое убогое место
 
 Top
Champion Супермодератор
Отправлено: 02 Декабря, 2009 - 14:46:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




да, нигде в общем-то) Просто привычка - символы, которые могут что-то особое значить - экранировать
 
 Top
trot
Отправлено: 02 Декабря, 2009 - 21:04:59
Post Id


Новичок


Покинул форум
Сообщений всего: 34
Дата рег-ции: Нояб. 2009  


Помог: 0 раз(а)




Из двух предложенных вариантов самый эффективный, это у товарища Champion.
Если позволите немножно доработать.

/^<\?xml [^\\>]+\?\>$/m

Конструкции \< и \> в некоторых диалектах обозначают границы слов

(Отредактировано автором: 02 Декабря, 2009 - 21:06:37)

 
 Top
ALEN
Отправлено: 02 Декабря, 2009 - 21:43:42
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Djin_dj
Ты вообще не парсер мучаешь? А то, если его, то есть готовое решение:
simplexml_load_string();
 
 Top
movEAX
Отправлено: 03 Декабря, 2009 - 12:05:13
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


Помог: 16 раз(а)




trot пишет:
Конструкции \< и \> в некоторых диалектах обозначают границы слов


Ни на минуту не сомневаюсь в вашей правоте, но, тем ни менее, речь идет о PHP, а границы тут обозначаются подобным образом: \b

(Отредактировано автором: 03 Декабря, 2009 - 12:05:49)



-----
армия.. самое убогое место
 
 Top
kotoff
Отправлено: 29 Августа, 2012 - 15:46:51
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Май 2012  


Помог: 0 раз(а)




вот примитивный парсер, настраиваетсяпод конкретную задачу
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?
  2. function parser ( ) // парсер xml
  3. {
  4.        $data = '' ;
  5.      for ( Reset ( $_POST ) ; ( $k = key ( $_POST ) ) ; Next ( $_POST ) ) $data .= $k . "=". $_POST[$k] . "\n" ; // скан POST'а
  6.  
  7.   return preg_replace (  '/&&+/', '&', str_replace ( array ( "\x20","\r\n", '<', '>', '/', '?' ), '&', str_replace ( array ( '"', '\\'), '', $data )  ) ) ;//удаляем ", заменяем все "левые" символы на эмперсанд а серию &&+ на один &
  8. }
  9.  
  10. //Вызываем так
  11.  
  12. parse_str ( parser ( ) ) ;
  13.  
  14. ?>
  15.  



запрос POST такого вида
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?xml version="1.0" encoding="utf-8"?><client session="9586783374419774" rnd="1346244809022" command="bet"><bet cash="1" coin="1" shift="0,0,0,0,0" lines="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20" /><debug cash-bet="20" cash-user="12480" /></client>
  2.  


Превращает в строку такого вида
CODE (htmlphp):
скопировать код в буфер обмена
  1. &xml_version=1.0&encoding=utf-8&client&session=9586783374419774&rnd=1346244809022&command=bet&bet&cash=1&coin=1&shift=0,0,0,0,0&lines=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20&debug&cash-bet=20&cash-user=12480&client&



вот тут можем посмотреть результат работы

(Отредактировано автором: 29 Августа, 2012 - 16:09:34)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB