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

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

1. tyshka - 22 Февраля, 2015 - 17:46:13 - перейти к сообщению
помогите пожалуйста разобрать строку с помощью регулярки и preg_match_all

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

нужно получить раздельно содержимое из title="" , image="" и то что между квадратными скобками [item]содержимое[/item]

т.е. нужно получить из этой строки

1 - заголовок
2 - ссылка
3 - содержимое

спасибо заранее
2. Ts.Saltan - 22 Февраля, 2015 - 17:51:57 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $data = '[item title="заголовок" image="ссылка"]содержимое[/item]';
  2. preg_match_all('#\[item title="([^"]+)" image="([^"]+)"\]([^\[]*)\[/item\]#Ui',$data, $res);
  3. var_dump($res);
3. tyshka - 22 Февраля, 2015 - 18:18:16 - перейти к сообщению
Ts.Saltan пишет:
PHP:
скопировать код в буфер обмена
  1. $data = '[item title="заголовок" image="ссылка"]содержимое[/item]';
  2. preg_match_all('#\[item title="([^"]+)" image="([^"]+)"\]([^\[]*)\[/item\]#Ui',$data, $res);
  3. var_dump($res);


результат:

array(4) {
[0]=>
array(0) {
}
[1]=>
array(0) {
}
[2]=>
array(0) {
}
[3]=>
array(0) {
}
}
4. Ts.Saltan - 22 Февраля, 2015 - 18:26:52 - перейти к сообщению
Только что перепроверил
не поленился, запустил сервер Радость

работает как часы

CODE (htmlphp):
скопировать код в буфер обмена
  1. array(4) {
  2.   [0]=>
  3.   array(1) {
  4.     [0]=>
  5.     string(81) "[item title="заголовок" image="ссылка"]содержимое[/item]"
  6.   }
  7.   [1]=>
  8.   array(1) {
  9.     [0]=>
  10.     string(18) "заголовок"
  11.   }
  12.   [2]=>
  13.   array(1) {
  14.     [0]=>
  15.     string(12) "ссылка"
  16.   }
  17.   [3]=>
  18.   array(1) {
  19.     [0]=>
  20.     string(20) "содержимое"
  21.   }
  22. }
5. tyshka - 22 Февраля, 2015 - 18:58:32 - перейти к сообщению
Ts.Saltan пишет:
Только что перепроверил
не поленился, запустил сервер Радость

работает как часы


да работает если использовать только в точности этот вариант - т.е.

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  
  3. $data = '[item title="заголовок" image="ссылка"]содержимое[/item]';
  4. preg_match_all('#\[item title="([^"]+)" image="([^"]+)"\]([^\[]*)\[/item\]#Ui',$data, $res);
  5. var_dump($res);
  6.  
  7.  


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

данные которые берутся

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  
  3. print_r( $content );
  4.  
  5. [item title=”заголовок1” image=”ссылка1]содержимое1[/item]
  6. [item title=”заголовок2” image=”ссылка2]содержимое2[/item]
  7. [item title=”заголовок3” image=”ссылка3]содержимое3[/item]
  8. [item title=”заголовок4” image=”ссылка4]содержимое4[/item]
  9. [item title=”заголовок5” image=”ссылка5]содержимое5[/item]
  10.  
  11.  


само выражение

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  
  3. preg_match_all( '#\[item title="([^"]+)" image="([^"]+)"\]([^\[]*)\[/item\]#Ui', $content, $matches );
  4.  
  5.  


результат

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  
  3. print_r( $matches );
  4.  
  5. (
  6.     [0] => Array
  7.         (
  8.         )
  9.  
  10.     [1] => Array
  11.         (
  12.         )
  13.  
  14.     [2] => Array
  15.         (
  16.         )
  17.  
  18.     [3] => Array
  19.         (
  20.         )
  21.  
  22. )
  23.  
  24.  
6. Ts.Saltan - 22 Февраля, 2015 - 20:08:06 - перейти к сообщению
кавычки
они такие " (под них регулярка)
или такие ” (это уже совсем другой символ)
?
7. tyshka - 22 Февраля, 2015 - 20:11:39 - перейти к сообщению
Ts.Saltan пишет:
кавычки
они такие " (под них регулярка)
или такие ” (это уже совсем другой символ)
?


вообще кавычки такие "

но при print_r( $content );

получается что кавычки ”
8. Ts.Saltan - 22 Февраля, 2015 - 20:21:45 - перейти к сообщению
напишите примерный блок данных, который нужно распарсить
var_export($content)
9. tyshka - 22 Февраля, 2015 - 20:28:11 - перейти к сообщению
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.  
10. Ts.Saltan - 22 Февраля, 2015 - 20:38:30 - перейти к сообщению
так нужен
[item title=...
или
[item link=...
?
11. tyshka - 22 Февраля, 2015 - 20:45:59 - перейти к сообщению
да без разницы, это же не имеет существенного значения главное если я буду применять "title" значит там должен присутствовать этот параметр [item title=...
если буду применять link значит [item link=...
12. tyshka - 23 Февраля, 2015 - 04:31:38 - перейти к сообщению
так как заменить кавычки? или может кавычки вообще искоючить из регулярки чтобы не было танцев если кавычки будут другими отличными от условий проверки
13. Ts.Saltan - 24 Февраля, 2015 - 17:02:32 - перейти к сообщению
tyshka пишет:
да без разницы, это же не имеет существенного значения

Для регулярки имеет значение, напишите какие могут быть ключи кроме link, title и т.д.
Та регулярка, что я написал для item title...

А вообще, структура похожа на xml, я бы поменял скобки [] на <> и парсил как xml встроенными функциями (simpleXML)
14. tyshka - 24 Февраля, 2015 - 17:18:09 - перейти к сообщению
Ts.Saltan пишет:
tyshka пишет:
да без разницы, это же не имеет существенного значения

Для регулярки имеет значение, напишите какие могут быть ключи кроме link, title и т.д.
Та регулярка, что я написал для item title...

А вообще, структура похожа на xml, я бы поменял скобки [] на <> и парсил как xml встроенными функциями (simpleXML)


структура похожа на bbcode, а вообще это под wordpress шорткод, поэтому [] скобки не имеет смысла менять, они будут изначально и перегонять их из квадратных в <> не имеет смысла

давайте под начальный вариант решим Улыбка

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


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

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


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


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

 

Powered by ExBB FM 1.0 RC1