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 :: Версия для печати :: Что такое "/(\w+) (\d+), (\d+)/i" ???
Форумы портала PHP.SU » PHP » Программирование на PHP » Что такое "/(\w+) (\d+), (\d+)/i" ???

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

1. Extazy - 05 Апреля, 2011 - 15:11:37 - перейти к сообщению
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 они ещё встречаются. Какой в них смысл? Где почитать можно об этом?
2. Мелкий - 05 Апреля, 2011 - 15:20:40 - перейти к сообщению
Регулярные выражения.
Основы есть тут: http://php.su/lessons/?lesson_17
3. Extazy - 05 Апреля, 2011 - 17:07:10 - перейти к сообщению
$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);


так уже голова болит от этого кода.. помогите, пожалуйста
4. EuGen - 05 Апреля, 2011 - 17:37:53 - перейти к сообщению
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.  
5. Extazy - 05 Апреля, 2011 - 17:52:21 - перейти к сообщению
дайте готовый вариант. я итак путаюсь в этих символах, а вы ещё глубже меня топите. Огорчение
(Добавление)
рабочий вариант!
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, спасибо Вам.
6. kaktusjara - 06 Апреля, 2011 - 06:48:19 - перейти к сообщению
для проверки работоспособности вашего регекспа рекомендую http://regexpal[dot]com/
7. Extazy - 06 Апреля, 2011 - 19:13:36 - перейти к сообщению
а вот такой пример текста:
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);


подскажите. пожалуйста. где ошибка?
8. levchick - 06 Апреля, 2011 - 19:50:46 - перейти к сообщению
Не мое дело конечно, но я бы посоветовал для парсинга 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.  
9. Extazy - 06 Апреля, 2011 - 20:28:25 - перейти к сообщению
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 /> Огорчение

Знаете почему так???
(Добавление)
проблема решена!
всем огромное спасибо!!

 

Powered by ExBB FM 1.0 RC1