Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Технологии > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 19.09.2015, 13:47   #1
Karyuudo
Форумчанин
 
Регистрация: 17.02.2008
Сообщений: 53
Репутация: 10
По умолчанию Почему не срабатывает preg_replace?

Задача выполнить прег реплейсов ко всему файлу.
написал следующее:
Код:

<?php
$file='bdname.mysql.sql';
$string=file_get_contents($file); //переменной присваивается текст из файла эхо стринг выводит все ок, но затем
$result = preg_replace('#(<img .*? )width="\d{3}"#', '$1', $string); //убрать ширину картинок
echo $result; //выдает пустоту
file_put_contents ($file, $result); //соответственно делает файл пустым
?>

пробовал разные кодировки файла , тоже самое.
пробовал в нотпаде++ выполнить поиск
Код:

#(<img .*? )width="\d{3}"#

не находит.
при этом если вырезать нужный кусок и поискать - то прегреплейс работает

в чем дело? как выполнить запрос к файлу на замену?

еще по поводу другого запроса:
Код:

$result = preg_replace('#(<p>.*)(<img.*/>)(.*</p>)#', '$1$3$2', $result);

ничего не меняет в файле, при том, что если выборочно взять часть текста, то работает (правда ругается на ошибки, там где запятые, потому работало только там где их нет).

посмотрел и обнаружил еще вот что:
если взять кусок кода из файла
Код:

<p><img параметры картинки /></p>\r\n<p>текст1.</p>\r\n','\r\n<p> </p>\r\n<p> </p>\r\n<h2>подзаголовок</h2>\r\n<p>текст2.</p>\r\n<p>

и в нотпаде или дримвивере выполнить поиск по
Код:

 #(<p>.*)(<img.*/>)(.*</p>)#

- ничего не находит

а так -
Код:

(<p>.*)(<img.*/>)(.*</p>)

находит все кроме последних
Код:

\r\n<p>

т.е. берет лишнее, а потому видимо визуально и не заметно

что следует поправить, чтобы сработало?

Последний раз редактировалось Karyuudo; 19.09.2015 в 14:58.
Karyuudo вне форума   Ответить с цитированием
Старый 19.09.2015, 15:00   #2
uberchel
Профессионал
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,343
Репутация: 711

icq: 468407295
skype: uberchel
По умолчанию

Код:

'#(.img.+)\swidth=.\d{3}.#isU'

uberchel вне форума   Ответить с цитированием
Старый 19.09.2015, 20:18   #3
Karyuudo
Форумчанин
 
Регистрация: 17.02.2008
Сообщений: 53
Репутация: 10
По умолчанию

Цитата:
Сообщение от uberchel Посмотреть сообщение
Код:

'#(.img.+)\swidth=.\d{3}.#isU'

так же удаляет весь файл
Код:

$result = preg_replace('#(.img.+)\swidth=.\d{3}.#isU', '$1', $string);


а если так, то выдает ошибка, типа ошибка там где запятая

PHP код:
$string='$string='<p><img src=\"путь.jpg\" border=\"0\" alt=\"альт\" title=\"тайтл\" width=\"225\" height=\"230\" align=\"left\" /></p>\r\n<p>текст1.</p>\r\n','\r\n<p> </p>\r\n<p> </p>\r\n<h2>подзаголовок</h2>\r\n<p>текст2.</p>\r\n<p>';
';
echo preg_replace('#(.img.+)\swidth=.\d{3}.#isU', '$1', 
$string); 
если убрать запятую, то вообще ничего не заменяет
PHP код:
$string='<p><img src=\"путь.jpg\" border=\"0\" alt=\"альт\" title=\"тайтл\" width=\"225\" height=\"230\" align=\"left\" /></p>\r\n<p>текст1.</p>\r\n\r\n<p> </p>\r\n<p> </p>\r\n<h2>подзаголовок</h2>\r\n<p>текст2.</p>\r\n<p>';
echo 
htmlspecialchars(preg_replace('#(.img.+)\swidth=.\d{3}.#isU''$1'$string)); 
Может это как -то связано с тем, что ту не просто width="225" , а width=\"225\"?

Последний раз редактировалось Stilet; 19.09.2015 в 20:39.
Karyuudo вне форума   Ответить с цитированием
Старый 20.09.2015, 02:16   #4
Naive
Раздолбайских Дел
Профессионал
 
Аватар для Naive
 
Регистрация: 22.05.2009
Адрес: Екатеринбург
Сообщений: 3,706
Репутация: 2205
По умолчанию

Все нижеследующее идет из предположения, что символ # объявляет границы регулярки:
0. почитай про жадную и ленивую квантификацию, хотяб на вике.
1. Основное правило регулярок — что ты хочешь заменить или удалить, то и ищи, поэтому:
2. в ПЫХе есть поддержка перл-стайл регулярок, значит там можно юзануть пре-поиск. Первоначальную инфу можно раскопать там же.
3. Стоит прислушаться к бывалым: почему не стоит парсить html (первый ответ)
__________________
Работаю. В этот раз за деньги.
Жду ваши искренние спасибы на яндекс-кошелек: 410011068154587
Naive вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обьясните пожалуста как и что делает эта программа и почему она это делает. Dimka-novitsek Общие вопросы C/C++ 7 16.10.2013 12:02
Проблема! Пишет что на сервере нет файла, но файл точно делает свою роботу. Pein95 PHP 2 10.05.2012 11:03
Проблема с Preg_replace stepennwolf PHP 4 22.01.2011 20:44
Печать. Что делает MS и не делает Delphi Влад12 Общие вопросы Delphi 8 05.05.2010 20:04
preg_replace Def@ult PHP 2 12.11.2007 02:58


18:15.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru