Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2015, 12:47   #1
Karyuudo
Пользователь
 
Регистрация: 17.02.2008
Сообщений: 53
По умолчанию Почему не срабатывает 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 в 13:58.
Karyuudo вне форума Ответить с цитированием
Старый 19.09.2015, 14:00   #2
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,453
По умолчанию

Код:
'#(.img.+)\swidth=.\d{3}.#isU'
uberchel вне форума Ответить с цитированием
Старый 19.09.2015, 19:18   #3
Karyuudo
Пользователь
 
Регистрация: 17.02.2008
Сообщений: 53
По умолчанию

Цитата:
Сообщение от 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 в 19:39.
Karyuudo вне форума Ответить с цитированием
Старый 20.09.2015, 01:16   #4
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обьясните пожалуста как и что делает эта программа и почему она это делает. 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 19:44
Печать. Что делает MS и не делает Delphi Влад12 Общие вопросы Delphi 8 05.05.2010 20:04
preg_replace Def@ult PHP 2 12.11.2007 01:58