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

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

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

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


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


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


тогда под такие кавычки ”
17. Ts.Saltan - 24 Февраля, 2015 - 17:49:11 - перейти к сообщению
При чем тут кавычки Хм
Я ж даже ЖИРНЫМ выделил что в одной фразе title, в другой link
18. tyshka - 24 Февраля, 2015 - 18:06:55 - перейти к сообщению
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]
19. Ts.Saltan - 24 Февраля, 2015 - 18:21:39 - перейти к сообщению
tyshka пишет:
так я же в первом сообщении сегодня ответил что давайте сделаем под title

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

Замечательно работает
20. tyshka - 24 Февраля, 2015 - 18:26:50 - перейти к сообщению
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'


какое будет то и выдаст Подмигивание - так же можно сделать?
21. Ts.Saltan - 24 Февраля, 2015 - 19:19:21 - перейти к сообщению
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 с ними хреново работает, часть байтов возвращает вместе со значениями, получается такая хрень ���
22. tyshka - 24 Февраля, 2015 - 19:49:36 - перейти к сообщению
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 и содержимое - обязательно будут, а вот ссылка на картинку может отсутствовать
23. Ts.Saltan - 24 Февраля, 2015 - 19:57:26 - перейти к сообщению
Короче, вот вариант с 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.  


И ему пофиг на количество и наименование параметров, возвращает всё
24. tyshka - 24 Февраля, 2015 - 20:04:52 - перейти к сообщению
Цитата:

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


syntax error, unexpected '[', expecting ')'
25. Ts.Saltan - 24 Февраля, 2015 - 20:06:50 - перейти к сообщению
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.  
26. tyshka - 24 Февраля, 2015 - 20:50:08 - перейти к сообщению
что-то кучу ошибок выдает:

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/
27. tyshka - 24 Февраля, 2015 - 23:04:16 - перейти к сообщению
нашел немного другое решение - сделал замену кавычек, а потом уже измененный вариант парсить

CODE (html):
скопировать код в буфер обмена
  1.  
  2. $content_items = str_replace( '&#8221;', '"', $content );
  3.  
28. tyshka - 25 Февраля, 2015 - 16:39:17 - перейти к сообщению
Спасибо большое за помощь!
29. tyshka - 25 Февраля, 2015 - 21:00:39 - перейти к сообщению
есть еще вопросик... Улыбка подскажите пожалуйста

есть строка

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'
30. Ts.Saltan - 25 Февраля, 2015 - 22:12:19 - перейти к сообщению
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

 

Powered by ExBB FM 1.0 RC1