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 » PHP » Регулярные выражения » Не могу составить регулярное выражение, не стандартный пример

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

1. kismedia - 10 Февраля, 2016 - 15:05:43 - перейти к сообщению
Добрый день!
Уже ломаю голову несколько часов.

Суть условия:
В строке данных встречаются следующие конструкции
available="false">..произвольный текст, пробелы, вообщем все что угодно Улыбка <vendor>LEDO</vendor>

Необходимо изменить атрибут available="false" на available="true"
но только при условии окончания на <vendor>LEDO</vendor>

Собственно часть содержимого для более наглядного представления:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <offer id="1278" type="vendor.model" available="false">
  2. <url>
  3. http://ledosveshenie.ru/catalog/ofisnoe-svetodiodnoe-osveshchenie/svetodiodnyy-svetilnik-ledo-001-24-2600/?offer_id=1278&utm_source=market.yandex.ru&utm_term=1278
  4. </url>
  5. <price>1538</price>
  6. <currencyId>RUB</currencyId>
  7. <categoryId>70</categoryId>
  8. <picture>
  9. http://ledosveshenie.ru/upload/iblock/ceb/svetodiodnyy_svetilnik_ledo_001_24_2600.jpg
  10. </picture>
  11. <typePrefix>Светильник светодиодный</typePrefix>
  12. <vendor>LEDO</vendor>


Спасибо, если кто поможет.
2. Мелкий - 10 Февраля, 2016 - 15:15:21 - перейти к сообщению
Это же XML, при чёт тут регулярки?
3. kismedia - 10 Февраля, 2016 - 15:37:21 - перейти к сообщению
Мелкий пишет:
Это же XML, при чёт тут регулярки?


Да, но я обрабатываю этот файл регулярками, другого способа не знаю.
Допустим
PHP:
скопировать код в буфер обмена
  1. $file = fopen('yandex_market.php', 'r');
  2. $text = fread($file, filesize('yandex_market.php'));
  3. $text = preg_replace("'<description[^>]*?>.*?</description>'si","",$text);


В примере как бы убрал тег <description>, все норм. И залил опять в в файл.

Подскажите, если я не прав, не силен в PHP.
Как осуществить правильно выше упомянутую задачу замены.

То есть мне нужно выставить атрибут available="true" на весь товар с производителем LEDO

Сам yandex_market.php' формируется Битриксом, покопался в коде, но это не мой уровень, не разберусь.

Поэтому просто решил запускать доп. обработчик на РHP.
Открывать, делать замены и записывать опять в файл.
Как то так.
4. Мелкий - 10 Февраля, 2016 - 16:07:51 - перейти к сообщению
Ещё раз - это XML. Не надо извращаться, надо его и читать как XML.
Для обработки XML, наверное, в любом языке есть штатные средства. А то, как в случае с PHP, и не одно средство.

Проще всего использовать simplexml. Прочитали файлик, изменили где нужно атрибуты, записали файлик.
5. kismedia - 10 Февраля, 2016 - 16:26:05 - перейти к сообщению
Мелкий пишет:
Ещё раз - это XML. Не надо извращаться, надо его и читать как XML.
Для обработки XML, наверное, в любом языке есть штатные средства. А то, как в случае с PHP, и не одно средство.

Проще всего использовать simplexml. Прочитали файлик, изменили где нужно атрибуты, записали файлик.


Спасибо, но регуляпку все равно же придется строить?
Мне же не просто убрать тег или изменить, а изменить при условии что....
6. Мелкий - 10 Февраля, 2016 - 17:12:01 - перейти к сообщению
Нет, не придётся. PHP отлично умеет выполнять if.

 

Powered by ExBB FM 1.0 RC1