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 :: Что такое "/(\w+) (\d+), (\d+)/i" ???

 PHP.SU

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


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

> Без описания
Extazy
Отправлено: 05 Апреля, 2011 - 15:11:37
Post Id


Посетитель


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


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




PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $string = "April 15, 2003";
  3. $pattern = "/(\w+) (\d+), (\d+)/i";
  4. $replacement = "\${1}1,\$3";
  5. echo preg_replace($pattern, $replacement, $string);
  6. ?>


Здравствуйте.
Подскажите что это за "/(\w+) (\d+), (\d+)/i" ?? и в .htacces они ещё встречаются. Какой в них смысл? Где почитать можно об этом?
 
 Top
Мелкий Супермодератор
Отправлено: 05 Апреля, 2011 - 15:20:40
Post Id



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


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


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




Регулярные выражения.
Основы есть тут: http://php.su/lessons/?lesson_17


-----
PostgreSQL DBA
 
 Top
Extazy
Отправлено: 05 Апреля, 2011 - 17:07:10
Post Id


Посетитель


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


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




$data содержит:
PHP:
скопировать код в буфер обмена
  1. <response>
  2. <message>
  3. ok
  4. </message>
  5. </response>


помогите выделить ok.
вот моя попытка написать код.. не работает Не понял

PHP:
скопировать код в буфер обмена
  1.     $pattern = "/(<\w+>\n) (.+) (\n<\/\w+>)/";
  2.     $replacement = "^{2}$";
  3.     $status = preg_replace($pattern, $replacement, $data);


так уже голова болит от этого кода.. помогите, пожалуйста
 
 Top
EuGen Администратор
Отправлено: 05 Апреля, 2011 - 17:37:53
Post Id


Профессионал


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


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




PHP:
скопировать код в буфер обмена
  1.  
  2. $str='
  3.      <response>
  4.      <message>
  5.      ok
  6.      </message>
  7.      </response>
  8. ';
  9. $pattern='/\s*\<response\>\s*\<message\>\s*([^\s]*)\s*\<\/message\>\s*\<\/response\>\s*/mi';
  10. preg_match($pattern,$str, $rgMatches);
  11. var_dump($rgMatches);
  12.  


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Extazy
Отправлено: 05 Апреля, 2011 - 17:52:21
Post Id


Посетитель


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


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




дайте готовый вариант. я итак путаюсь в этих символах, а вы ещё глубже меня топите. Огорчение
(Добавление)
рабочий вариант!
PHP:
скопировать код в буфер обмена
  1. $pattern = '/\s*\<response\>\s*\<message\>\s*([^\s]*)\s*\<\/message\>\s*\<\/response\>\s*/mi';
  2. $replacement = "\$1";
  3. $status = preg_replace($pattern, $replacement, $data);


правильно ли я понимаю работу этой функции?:
1. в $pattern я составляю шаблон ВСЕГО текста и то, что я хочу оставить, обвожу круглыми скобками).
2. в $replacement проставляю в нужном мне порядке то, что было обведено круглыми скобками.

тааак?

EuGen, спасибо Вам.

(Отредактировано автором: 05 Апреля, 2011 - 17:52:38)

 
 Top
kaktusjara
Отправлено: 06 Апреля, 2011 - 06:48:19
Post Id


Новичок


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


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




для проверки работоспособности вашего регекспа рекомендую http://regexpal[dot]com/
 
 Top
Extazy
Отправлено: 06 Апреля, 2011 - 19:13:36
Post Id


Посетитель


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


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




а вот такой пример текста:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <response>
  2. <message>ok</message>
  3. <sub_id>ххх</sub_id>
  4. <user_id>7хххххххххх</user_id>
  5. </response>


я составил вот такой код:
PHP:
скопировать код в буфер обмена
  1.   $pattern = '/\s*\<response\>\s*\<errors\>\s*\<error\>\s*([^\s]*)\s*\<\/error\>\s*\<\/errors\>\s*\<\/response\>\s*/mi';
  2.   $replacement = "\$1";
  3.   $message = preg_replace($pattern, $replacement, $data);


подскажите. пожалуйста. где ошибка?
 
 Top
levchick
Отправлено: 06 Апреля, 2011 - 19:50:46
Post Id



Новичок


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


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




Не мое дело конечно, но я бы посоветовал для парсинга XML использовать библиотеку SimpleXML. Ну или любую другую, предназначенную для работы с XML форматом. Это намного проще, чем взрывать мозг регулярными выражениями.

В этом случае:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <response>
  3. <message>ok</message>
  4. <sub_id>ххх</sub_id>
  5. <user_id>7хххххххххх</user_id>
  6. </response>
  7.  


парсинг выглядел бы следущим образом:

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $xmlObject=simplexml_load_string($string); //$string содержит то, что надо раcпарсить
  4.  
  5. echo $xmlObject->message."<br/>"; //выведет ok
  6. echo $xmlObject->sub_id."<br/>"; // ххх
  7. echo $xmlObject->user_id."<br/>"; // 7хххххххххх
  8.  
  9.  

(Отредактировано автором: 06 Апреля, 2011 - 19:56:59)

 
 Top
Extazy
Отправлено: 06 Апреля, 2011 - 20:28:25
Post Id


Посетитель


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


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




levchick, спасибо! так действительно намного проще.

только вот проблемака:
если вот этот вот исходный xml код прописать в самом .php файле и ниже функцию simplexml_load_string, то все данные успешно выносятся.

Но!.. этот xml код я беру со стороннего сайта вот таким кодом:
PHP:
скопировать код в буфер обмена
  1. $ch = curl_init('http://mt.paystream.ru/check_code/?code=12344');
  2.   $x = curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  3.   $data = @curl_exec($ch);
  4.  
  5.   $xmlObject=simplexml_load_string($data);
  6.  
  7.   echo $xmlObject->error."<br/>"; //выведет ok


и тогда после выполнения скрипт на экран ничего не выводится кроме <br /> Огорчение

Знаете почему так???
(Добавление)
проблема решена!
всем огромное спасибо!!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB