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 :: Версия для печати :: Почему не подменяется текст, если регвыражение верно?
Форумы портала PHP.SU » » Вопросы новичков » Почему не подменяется текст, если регвыражение верно?

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

1. borus - 24 Декабря, 2012 - 08:15:34 - перейти к сообщению
Здравствуйте.

Проверил на сайте регвыражение
но почему-то код:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $s = preg_replace('/<tr.*?Конвертация данных.*?<\/tr>/is', '', $s);

не выполняется. $s содержит строку выводящую таблицу, в которой надо удалить строку со словосочетанием "Конвертация данных".
В чем моя ошибка?
2. armancho7777777 - 24 Декабря, 2012 - 08:38:15 - перейти к сообщению
borus пишет:
В чем моя ошибка?

Не знаю.
У меня работает.
PHP:
скопировать код в буфер обмена
  1.  
  2. $s = '
  3.  
  4. <table width="100%" border="1">
  5.  <tr>
  6.    <td>&nbsp;</td>
  7.    <td>Конвертация данных</td>
  8.  </tr>
  9.  <tr>
  10.    <td>&nbsp;</td>
  11.    <td>&nbsp;</td>
  12.  </tr>
  13. </table>
  14.  
  15. ';
  16.  
  17. echo preg_replace('/<tr.*?Конвертация данных.*?<\/tr>/is', '', $s);
  18.  
3. borus - 24 Декабря, 2012 - 08:47:59 - перейти к сообщению
armancho7777777 пишет:
borus пишет:
В чем моя ошибка?

Не знаю.
У меня работает.

Видимо переменная $s имеет какую-то другую разметку.
Код html выводимой таблицы можно увидеть здесь - http://c-info[dot]ru/index.php?optio[dot][dot][dot]rticle&id=25
4. armancho7777777 - 24 Декабря, 2012 - 09:36:03 - перейти к сообщению
Пока так сделал:
PHP:
скопировать код в буфер обмена
  1.  
  2. $s = preg_replace('/(?<=<\/tr>)\s*<tr.*?Конвертация данных.*?<\/tr>/is', '', $s);
  3. echo preg_replace('/\s*<tr.*?Конвертация данных.*?<\/tr>/is', '', $s);
  4.  

Что-то не получается у меня с условием сделать.
То есть спрва моет быть закрывающий tr, а может и не быть.
5. borus - 24 Декабря, 2012 - 10:13:52 - перейти к сообщению
armancho7777777 пишет:
Пока так сделал:
PHP:
скопировать код в буфер обмена
  1.  
  2. $s = preg_replace('/(?<=<\/tr>)\s*<tr.*?Конвертация данных.*?<\/tr>/is', '', $s);
  3. echo preg_replace('/\s*<tr.*?Конвертация данных.*?<\/tr>/is', '', $s);
  4.  

Что-то не получается у меня с условием сделать.
То есть спрва моет быть закрывающий tr, а может и не быть.

не работает.
Привожу весь работающий код:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. //header('Content-type:text/html;charset=utf-8');
  4.  
  5. /*Получение данных.*/
  6. function data($path,$host){
  7.     $fp = fsockopen($host, 80);
  8.     if (!$fp){die('ошибка');}
  9.     else{
  10.         $out = "GET $path HTTP/1.0\r\n";
  11.         $out .= "Accept: image/gif, application/xhtml+xml, */*\r\n";
  12.         $out .= "Accept-Language: ru\r\n";
  13.         $out .= "Host: $host\r\n";
  14.         //прикинемся оперой-мини
  15.         $out .= "User-Agent: Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4509/1716; ru; U; ssr)\r\n";
  16.         $out .= "Cache-Control: no-cache\r\n";
  17.         $out .= "Connection: Close\r\n\r\n";
  18.         fwrite($fp, $out);
  19.         $headers = "";
  20.         while ($str = trim(fgets($fp)))
  21.         $headers .= "$str\n";
  22.         $body = "";
  23.         while (!feof($fp))
  24.         $body .= fgets($fp);
  25.         fclose($fp);
  26.     }
  27.     return $body;
  28. }
  29.  
  30. $host='downloads.1c.ru';
  31. $path='/release_info/categ_js.jsp?GroupID=88';
  32.  
  33. //запуск
  34. $s=data($path,$host);
  35.  
  36. //обрабатываем (ВТОРОЙ ЭТАП)
  37. function process($s){
  38.         $s=mb_convert_encoding($s,'UTF-8','CP1251');
  39.         $s = preg_replace('/document\.write\(\'(.*?)\'\);/is', '$1', $s);
  40.         $s=stristr($s,'<table border="1" cellpadding="3" cellspacing="0" width="100%" class="content">');
  41.         $s = preg_replace('/\/\/\s\d{2,3}\s-->\s/is', '', $s);
  42.         $s = str_replace ('\\', '', $s);
  43.         $s = preg_replace('/(?<=<\/tr>)\s*<tr.*?Конвертация данных.*?<\/tr>/is', '', $s);
  44.         return $s;
  45. }
  46. $s=process($s);
  47. echo preg_replace('/\s*<tr.*?Конвертация данных.*?<\/tr>/is', '', $s);
  48. ?>
  49.  
6. borus - 26 Декабря, 2012 - 14:55:31 - перейти к сообщению
оказывается файл надо бы конвертировать в UTF-8 BOM. Однако...
теперь другая задача.
На странице создал пример, описывающий ситуацию: регвыражение захватывает текст начиная с первого появления символов <tr, начиная с первой строки таблицы.

Как должно выглядеть регвыражение, чтобы оно соответствовало только второй строке таблицы?

P.S. кто-нибудь подскажет как искать свои темы по другому нежели через личный email? Поиском по форуму я нашел лишь одну свою тему Улыбка
7. armancho7777777 - 26 Декабря, 2012 - 15:58:08 - перейти к сообщению
borus пишет:
кто-нибудь подскажет как искать свои темы

Выберите нужный раздел и в самом низу выберите фильтр по автору.
8. borus - 27 Декабря, 2012 - 14:58:42 - перейти к сообщению
Вот такое выражение помогло:
CODE (text):
скопировать код в буфер обмена
  1. /<tr(?!.+?<tr).+?искомая фраза.+?<\/tr>/is

но оно уже не действует на строке, содержащей html-код таблицы вида:
CODE (text):
скопировать код в буфер обмена
  1. <table>
  2. <tr>
  3. <td>1/1</td>
  4. <td>фраза</td>
  5. </tr>
  6. <tr>
  7. <td>2/2</td>
  8. <td>искомая фраза</td>
  9. </tr>
  10. <tr>
  11. <td>2/2</td>
  12. <td>еще одна строка</td>
  13. </tr>
  14. </table>

кто-нибудь скажет, почему?

 

Powered by ExBB FM 1.0 RC1