PHP.SU

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

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

> Найдено сообщений: 23
tyshka Отправлено: 25 Февраля, 2015 - 23:48:45 • Тема: регулярка для preg_match_all • Форум: Регулярные выражения

Ответов: 31
Просмотров: 4038
Ts.Saltan пишет:
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


прошу прощения, я не уточнил что в примере строки - category_* - название категории не в точности такое, а слово или словo-слово т.е. любое слово и если в названии категории несколько слов они разделены дефисами - и сами эти названия категорий в строке разделены запятыми

слово(1), слово-слово(2), слово(5) и т.д.
tyshka Отправлено: 25 Февраля, 2015 - 21:00:39 • Тема: регулярка для preg_match_all • Форум: Регулярные выражения

Ответов: 31
Просмотров: 4038
есть еще вопросик... Улыбка подскажите пожалуйста

есть строка

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'
tyshka Отправлено: 25 Февраля, 2015 - 16:39:17 • Тема: регулярка для preg_match_all • Форум: Регулярные выражения

Ответов: 31
Просмотров: 4038
Спасибо большое за помощь!
tyshka Отправлено: 24 Февраля, 2015 - 23:04:16 • Тема: регулярка для preg_match_all • Форум: Регулярные выражения

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

CODE (html):
скопировать код в буфер обмена
  1.  
  2. $content_items = str_replace( '”', '"', $content );
  3.  
tyshka Отправлено: 24 Февраля, 2015 - 20:50:08 • Тема: регулярка для preg_match_all • Форум: Регулярные выражения

Ответов: 31
Просмотров: 4038
что-то кучу ошибок выдает:

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/
tyshka Отправлено: 24 Февраля, 2015 - 20:04:52 • Тема: регулярка для preg_match_all • Форум: Регулярные выражения

Ответов: 31
Просмотров: 4038
Цитата:

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


syntax error, unexpected '[', expecting ')'
tyshka Отправлено: 24 Февраля, 2015 - 19:49:36 • Тема: регулярка для preg_match_all • Форум: Регулярные выражения

Ответов: 31
Просмотров: 4038
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 и содержимое - обязательно будут, а вот ссылка на картинку может отсутствовать
tyshka Отправлено: 24 Февраля, 2015 - 18:26:50 • Тема: регулярка для preg_match_all • Форум: Регулярные выражения

Ответов: 31
Просмотров: 4038
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'


какое будет то и выдаст Подмигивание - так же можно сделать?
tyshka Отправлено: 24 Февраля, 2015 - 18:06:55 • Тема: регулярка для preg_match_all • Форум: Регулярные выражения

Ответов: 31
Просмотров: 4038
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]
tyshka Отправлено: 24 Февраля, 2015 - 17:38:25 • Тема: регулярка для preg_match_all • Форум: Регулярные выражения

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

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


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


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


тогда под такие кавычки ”
tyshka Отправлено: 24 Февраля, 2015 - 17:18:09 • Тема: регулярка для preg_match_all • Форум: Регулярные выражения

Ответов: 31
Просмотров: 4038
Ts.Saltan пишет:
tyshka пишет:
да без разницы, это же не имеет существенного значения

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

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


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

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

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


вот главный вопрос остается - может вообще убрать использование кавычек? чтобы небыло зависимости от типа кавычек
tyshka Отправлено: 23 Февраля, 2015 - 04:31:38 • Тема: регулярка для preg_match_all • Форум: Регулярные выражения

Ответов: 31
Просмотров: 4038
так как заменить кавычки? или может кавычки вообще искоючить из регулярки чтобы не было танцев если кавычки будут другими отличными от условий проверки
tyshka Отправлено: 22 Февраля, 2015 - 20:45:59 • Тема: регулярка для preg_match_all • Форум: Регулярные выражения

Ответов: 31
Просмотров: 4038
да без разницы, это же не имеет существенного значения главное если я буду применять "title" значит там должен присутствовать этот параметр [item title=...
если буду применять link значит [item link=...
tyshka Отправлено: 22 Февраля, 2015 - 20:28:11 • Тема: регулярка для preg_match_all • Форум: Регулярные выражения

Ответов: 31
Просмотров: 4038
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.  
tyshka Отправлено: 22 Февраля, 2015 - 20:11:39 • Тема: регулярка для preg_match_all • Форум: Регулярные выражения

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


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

но при print_r( $content );

получается что кавычки ”

Страниц (2): [1] 2 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB