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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: регулярка для preg_match_all [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): « 1 [2] 3 »   

> Описание: регулярка
tyshka
Отправлено: 24 Февраля, 2015 - 17:38:25
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Ts.Saltan пишет:
tyshka пишет:
вот главный вопрос остается - может вообще убрать использование кавычек?
не в кавычках дело, а в именовании параметров

Регулярка
Цитата:
'#\[item title="([^"]+)" image="([^"]+)"\]([^\[]*)\[/item\]#Ui'


Подойдёт для
tyshka пишет:
[item title="заголовок" image="ссылка"]содержимое[/item]


Но не для
tyshka пишет:
[item link=”link1” image=”ссылка1”]содержимое1[/item]


тогда под такие кавычки ”
 
 Top
Ts.Saltan
Отправлено: 24 Февраля, 2015 - 17:49:11
Post Id



Посетитель


Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013  
Откуда: Belarus


Помог: 22 раз(а)




При чем тут кавычки Хм
Я ж даже ЖИРНЫМ выделил что в одной фразе title, в другой link

(Отредактировано автором: 24 Февраля, 2015 - 17:49:48)

 
 Top
tyshka
Отправлено: 24 Февраля, 2015 - 18:06:55
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Ts.Saltan пишет:
При чем тут кавычки Хм
Я ж даже ЖИРНЫМ выделил что в одной фразе title, в другой link


так я же в первом сообщении сегодня ответил что давайте сделаем под title

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. [item title="заголовок" image="ссылка"]содержимое[/item]
  3.  

(Добавление)
Ts.Saltan пишет:


Регулярка
Цитата:
'#\[item title="([^"]+)" image="([^"]+)"\]([^\[]*)\[/item\]#Ui'


Подойдёт для

tyshka пишет:
[item title="заголовок" image="ссылка"]содержимое[/item]


Но не для
tyshka пишет:
[item link=”link1” image=”ссылка1”]содержимое1[/item]


это я понимаю и это очевидно Улыбка

если использовать

Цитата:
'#\[item title="([^"]+)" image="([^"]+)"\]([^\[]*)\[/item\]#Ui'


дначит толжно быть

Цитата:
[item title="заголовок" image="ссылка"]содержимое[/item]


если буду использовать link

Цитата:
'#\[item link="([^"]+)" image="([^"]+)"\]([^\[]*)\[/item\]#Ui'


дначит толжно быть

Цитата:
[item link="заголовок" image="ссылка"]содержимое[/item]
 
 Top
Ts.Saltan
Отправлено: 24 Февраля, 2015 - 18:21:39
Post Id



Посетитель


Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013  
Откуда: Belarus


Помог: 22 раз(а)




tyshka пишет:
так я же в первом сообщении сегодня ответил что давайте сделаем под title

Цитата:
'#\[item title="([^"]+)" image="([^"]+)"\]([^\[]*)\[/item\]#Ui'

Замечательно работает

(Отредактировано автором: 24 Февраля, 2015 - 18:22:32)

 
 Top
tyshka
Отправлено: 24 Февраля, 2015 - 18:26:50
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Ts.Saltan пишет:
tyshka пишет:
так я же в первом сообщении сегодня ответил что давайте сделаем под title

Цитата:
'#\[item title="([^"]+)" image="([^"]+)"\]([^\[]*)\[/item\]#Ui'

Замечательно работает


работает если кавычки ", а если кавычки ” - не работает
(Добавление)
Ts.Saltan пишет:
кавычки
они такие " (под них регулярка)
или такие ” (это уже совсем другой символ)
?


Ts.Saltan пишет:
напишите примерный блок данных, который нужно распарсить
var_export($content)


tyshka пишет:
Ts.Saltan пишет:
var_export($content)


CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  
  3.  
  4.                         '
  5. [item link=”link1” image=”ссылка1”]содержимое1[/item]
  6. [item link=”link2” image=”ссылка2”]содержимое2[/item]
  7. [item link=”link3” image=”ссылка3”]содержимое3[/item]
  8. [item link=”link4” image=”ссылка4”]содержимое4[/item]
  9. [item link=”link5” image=”ссылка5”]содержимое5[/item]
  10. '
  11.  
  12.  


мы же это уже вычислили что проблема все-таки в кавычках, но вы увидели что используется link и видимо подумали что я перепутал и использую регулярку

Цитата:
'#\[item title="([^"]+)" image="([^"]+)"\]([^\[]*)\[/item\]#Ui'


для парсинга
Цитата:
[item link=”link” image=”ссылка”]содержимое[/item]


но я использовал соответствующую регулярку под link
Цитата:
'#\[item link="([^"]+)" image="([^"]+)"\]([^\[]*)\[/item\]#Ui'


понимаете?

суть проблемы не в именовании link или title я понимаю что нужно использовать соответствующую регулярку под нужное именование

а проблема в кавычках

var_export($content) выдает

Цитата:
[item link=”link1” image=”ссылка1”]содержимое1[/item]


а регулярка написана под другие кавычки
(Добавление)
Ts.Saltan пишет:
При чем тут кавычки Хм
Я ж даже ЖИРНЫМ выделил что в одной фразе title, в другой link


можно же сделать и универсальный вариант под любое присутствующее именование
Цитата:

'#\[item link="([^"]+)" title="([^"]+)" other="([^"]+)" image="([^"]+)"\]([^\[]*)\[/item\]#Ui'


какое будет то и выдаст Подмигивание - так же можно сделать?

(Отредактировано автором: 24 Февраля, 2015 - 18:54:51)

 
 Top
Ts.Saltan
Отправлено: 24 Февраля, 2015 - 19:19:21
Post Id



Посетитель


Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013  
Откуда: Belarus


Помог: 22 раз(а)




tyshka пишет:

а проблема в кавычках

var_export($content) выдает

Цитата:
[item link=”link1” image=”ссылка1”]содержимое1[/item]


а регулярка написана под другие кавычки
(Добавление)
Ts.Saltan пишет:
При чем тут кавычки Хм
Я ж даже ЖИРНЫМ выделил что в одной фразе title, в другой link


можно же сделать и универсальный вариант под любое присутствующее именование
Цитата:

'#\[item link="([^"]+)" title="([^"]+)" other="([^"]+)" image="([^"]+)"\]([^\[]*)\[/item\]#Ui'


какое будет то и выдаст Подмигивание - так же можно сделать?

Ок, понял, сейчас пошаманю с кавычками

Если бы в блоке менялись только названия параметров, например
Цитата:

[item link=”link1” image=”ссылка1”]содержимое1[/item]
[item title=”link1” image=”ссылка1”]содержимое1[/item]
[item title=”link1” link=”ссылка1”]содержимое1[/item]

то я могу написать
но если еще будет меняться количество этих параметров - хз можно ли вообще настолько универсальную регулярку написать, по крайней мере я вряд ли напишу
(Добавление)
Блин, эти кавычки в юникоде, preg_match_all с ними хреново работает, часть байтов возвращает вместе со значениями, получается такая хрень ���
 
 Top
tyshka
Отправлено: 24 Февраля, 2015 - 19:49:36
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Ts.Saltan пишет:


Если бы в блоке менялись только названия параметров, например
Цитата:

[item link=”link1” image=”ссылка1”]содержимое1[/item]
[item title=”link1” image=”ссылка1”]содержимое1[/item]
[item title=”link1” link=”ссылка1”]содержимое1[/item]

то я могу написать
но если еще будет меняться количество этих параметров - хз можно ли вообще настолько универсальную регулярку написать, по крайней мере я вряд ли напишу


это был скорее такой "фантазийный" вопрос Радость

да будут менятся названия параметров, а количество будет всегда постоянным, но скорее было бы востребованным отсутствие содержимого в некоторых параметрах, что я имею ввиду, например

один или два параметра будут обязатено присутствовать, третий может быть пустым

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. [item link=”” image=”image1”]содержимое1[/item]
  3. [item link=”link1” image=”image1”]содержимое1[/item]
  4. [item link=”link1” image=”image1”]содержимое1[/item]
  5.  


т.е. картинка image и содержимое - обязательно будут, а вот ссылка на картинку может отсутствовать
 
 Top
Ts.Saltan
Отправлено: 24 Февраля, 2015 - 19:57:26
Post Id



Посетитель


Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013  
Откуда: Belarus


Помог: 22 раз(а)




Короче, вот вариант с xml безо всяких regexp
небольшой костыль, и данные парсятся как xml

PHP:
скопировать код в буфер обмена
  1. <?
  2. $data = '[item title="link1" image="ссылка1"]содержимое1[/item]
  3. [item title=”111” image=”222”]содержимое2[/item]
  4. [item title="link2" image="ссылка2"]содержимое2[/item]
  5. [item title="link3" image="ссылка3"]содержимое3[/item]
  6. [item title="link4" image="ссылка4"]содержимое4[/item]
  7. [item title="link5" image="ссылка5"]содержимое5[/item]
  8. ';
  9.  
  10.  
  11. $xml = simplexml_load_string('<?xml version="1.0" encoding="utf-8"?><root>'.str_replace(['[',']','”','”'],['<','>','"','"'], $data).'</root>');
  12.  
  13. foreach($xml as $k=>$v){
  14.         echo $k.': '.(string)$v.'; title:'.$v->attributes()->title.'; image: '.$v->attributes()->image.PHP_EOL;
  15. }


Выводит
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. item: содержимое1; title:link1; image: ссылка1
  3. item: содержимое2; title:111; image: 222
  4. item: содержимое2; title:link2; image: ссылка2
  5. item: содержимое3; title:link3; image: ссылка3
  6. item: содержимое4; title:link4; image: ссылка4
  7. item: содержимое5; title:link5; image: ссылка5
  8.  


И ему пофиг на количество и наименование параметров, возвращает всё
 
 Top
tyshka
Отправлено: 24 Февраля, 2015 - 20:04:52
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Цитата:

$xml = simplexml_load_string('<?xml version="1.0" encoding="utf-8"?><root>'.str_replace(['[',']','”','”'],['<','>','"','"'], $data).'</root>');


syntax error, unexpected '[', expecting ')'
 
 Top
Ts.Saltan
Отправлено: 24 Февраля, 2015 - 20:06:50
Post Id



Посетитель


Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013  
Откуда: Belarus


Помог: 22 раз(а)




tyshka пишет:
Цитата:

$xml = simplexml_load_string('<?xml version="1.0" encoding="utf-8"?><root>'.str_replace(['[',']','”','”'],['<','>','"','"'], $data).'</root>');


syntax error, unexpected '[', expecting ')'

старая версия php
вот под неё
PHP:
скопировать код в буфер обмена
  1. <?
  2. $data = '[item title="link1" image="ссылка1"]содержимое1[/item]
  3. [item title=”111” image=”222”]содержимое2[/item]
  4. [item title="link2" image="ссылка2"]содержимое2[/item]
  5. [item title="link3" image="ссылка3"]содержимое3[/item]
  6. [item title="link4" image="ссылка4"]содержимое4[/item]
  7. [item title="link5" image="ссылка5"]содержимое5[/item]
  8. ';
  9.  
  10.  
  11. $xml = simplexml_load_string('<?xml version="1.0" encoding="utf-8"?><root>'.str_replace(array('[',']','”','”'),array('<','>','"','"'), $data).'</root>');
  12.  
  13. foreach($xml as $k=>$v){
  14.         echo $k.': '.(string)$v.'; title:'.$v->attributes()->title.'; image: '.$v->attributes()->image.PHP_EOL;
  15. }
  16.  
 
 Top
tyshka
Отправлено: 24 Февраля, 2015 - 20:50:08
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




что-то кучу ошибок выдает:

Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 2: parser error : AttValue: " or ' expected in

Warning: simplexml_load_string() [function.simplexml-load-string]: <item link=”” image=”http://localhost/wp-content/uploads/2015/
 
 Top
tyshka
Отправлено: 24 Февраля, 2015 - 23:04:16
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




нашел немного другое решение - сделал замену кавычек, а потом уже измененный вариант парсить

CODE (html):
скопировать код в буфер обмена
  1.  
  2. $content_items = str_replace( '&#8221;', '"', $content );
  3.  

(Отредактировано автором: 25 Февраля, 2015 - 00:34:46)

 
 Top
tyshka
Отправлено: 25 Февраля, 2015 - 16:39:17
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Спасибо большое за помощь!
 
 Top
tyshka
Отправлено: 25 Февраля, 2015 - 21:00:39
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




есть еще вопросик... Улыбка подскажите пожалуйста

есть строка

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. 'category_1(1),category_2(2),category_3(2),category_4(1),category_5(1),category_6(1)'
  3.  


пояснение по строке

category_* - это название категории
(в скобках) к этим категориям указывается количество тем в соответствующей категории

нужно посчитать (сложить числа в скобках) - и вывести отдельно

и разбить строку на части разделенные запятой с удалением скобок

т.е.

из приведенной выше строки получить:

$category_items = 8; // сумма цифр в скобках

и распарсенная строка:

'category_1', 'category_2', 'category_3', 'category_4', 'category_5', 'category_6'
 
 Top
Ts.Saltan
Отправлено: 25 Февраля, 2015 - 22:12:19
Post Id



Посетитель


Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013  
Откуда: Belarus


Помог: 22 раз(а)




PHP:
скопировать код в буфер обмена
  1. $str = 'category_1(1),category_2(2),category_3(2),category_4(1),category_5(1),category_6(1)';
  2. preg_match_all('#(category_[0-9]+)\(([0-9]+)\)#Ui',$str, $res);
  3. $category_items  = 0;
  4. foreach($res[0] as $k=>$v){
  5.         $category_items += $res[2][$k];
  6.         echo $res[1][$k].', ';
  7. }
  8. echo PHP_EOL . '$category_items = '.$category_items;


Получается
CODE (htmlphp):
скопировать код в буфер обмена
  1. category_1, category_2, category_3, category_4, category_5, category_6,
  2. $category_items = 8
 
 Top
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB