PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Описание: регулярка
Поиск в теме | Версия для печати
tyshka
Отправлено: 24 Февраля, 2015 - 17:38:25
Новичок
Покинул форум
Сообщений всего: 23
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
Ts.Saltan пишет: tyshka пишет: вот главный вопрос остается - может вообще убрать использование кавычек?
не в кавычках дело, а в именовании параметров
Регулярка
Цитата: '#\[item title="([^"]+)" image="([^"]+)"\]([^\[]*)\[/item\]#Ui'
Подойдёт для
tyshka пишет: [item title ="заголовок" image="ссылка"]содержимое[/item]
Но не для
tyshka пишет: [item link =”link1” image=”ссылка1”]содержимое1[/item]
тогда под такие кавычки ”
Ts.Saltan
Отправлено: 24 Февраля, 2015 - 17:49:11
Посетитель
Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013
Откуда: Belarus
Помог: 22 раз(а)
При чем тут кавычки
Я ж даже
ЖИРНЫМ выделил что в одной фразе title, в другой link
(Отредактировано автором: 24 Февраля, 2015 - 17:49:48)
tyshka
Отправлено: 24 Февраля, 2015 - 18:06:55
Новичок
Покинул форум
Сообщений всего: 23
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
Ts.Saltan пишет: При чем тут кавычки
Я ж даже
ЖИРНЫМ выделил что в одной фразе title, в другой link
так я же в первом сообщении сегодня ответил что давайте сделаем под
title
(Добавление)
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]
Ts.Saltan
Отправлено: 24 Февраля, 2015 - 18:21:39
Посетитель
Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013
Откуда: Belarus
Помог: 22 раз(а)
tyshka пишет: так я же в первом сообщении сегодня ответил что давайте сделаем под title
Цитата: '#\[item title="([^"]+)" image="([^"]+)"\]([^\[]*)\[/item\]#Ui'
Замечательно работает
(Отредактировано автором: 24 Февраля, 2015 - 18:22:32)
tyshka
Отправлено: 24 Февраля, 2015 - 18:26:50
Новичок
Покинул форум
Сообщений всего: 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 ):
скопировать код в буфер обмена
'
[item link=”link1” image=”ссылка1”]содержимое1[/item]
[item link=”link2” image=”ссылка2”]содержимое2[/item]
[item link=”link3” image=”ссылка3”]содержимое3[/item]
[item link=”link4” image=”ссылка4”]содержимое4[/item]
[item link=”link5” image=”ссылка5”]содержимое5[/item]
'
мы же это уже вычислили что проблема все-таки в кавычках, но вы увидели что используется 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)
Ts.Saltan
Отправлено: 24 Февраля, 2015 - 19:19:21
Посетитель
Покинул форум
Сообщений всего: 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 с ними хреново работает, часть байтов возвращает вместе со значениями, получается такая хрень ���
tyshka
Отправлено: 24 Февраля, 2015 - 19:49:36
Новичок
Покинул форум
Сообщений всего: 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]
то я могу написать
но если еще будет меняться количество этих параметров - хз можно ли вообще настолько универсальную регулярку написать, по крайней мере я вряд ли напишу
это был скорее такой "фантазийный" вопрос
да будут менятся названия параметров, а количество будет всегда постоянным, но скорее было бы востребованным отсутствие содержимого в некоторых параметрах, что я имею ввиду, например
один или два параметра будут обязатено присутствовать, третий может быть пустым
т.е. картинка image и содержимое - обязательно будут, а вот ссылка на картинку может отсутствовать
Ts.Saltan
Отправлено: 24 Февраля, 2015 - 19:57:26
Посетитель
Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013
Откуда: Belarus
Помог: 22 раз(а)
Короче, вот вариант с xml безо всяких regexp
небольшой костыль, и данные парсятся как xml
PHP:
скопировать код в буфер обмена
<?
$data = '[item title="link1" image="ссылка1"]содержимое1[/item]
[item title=”111” image=”222”]содержимое2[/item]
[item title="link2" image="ссылка2"]содержимое2[/item]
[item title="link3" image="ссылка3"]содержимое3[/item]
[item title="link4" image="ссылка4"]содержимое4[/item]
[item title="link5" image="ссылка5"]содержимое5[/item]
' ;
foreach ( $xml as $k => $v ) {
echo $k . ': ' . ( string) $v . '; title:' . $v -> attributes ( ) -> title . '; image: ' . $v -> attributes ( ) -> image . PHP_EOL;
}
Выводит
CODE (
htmlphp ):
скопировать код в буфер обмена
item: содержимое1 ; title: link1; image: ссылка1
item: содержимое2 ; title: 111 ; image: 222
item: содержимое2 ; title: link2; image: ссылка2
item: содержимое3 ; title: link3; image: ссылка3
item: содержимое4 ; title: link4; image: ссылка4
item: содержимое5 ; title: link5; image: ссылка5
И ему пофиг на количество и наименование параметров, возвращает всё
tyshka
Отправлено: 24 Февраля, 2015 - 20:04:52
Новичок
Покинул форум
Сообщений всего: 23
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
Цитата:
$xml = simplexml_load_string('<?xml version="1.0" encoding="utf-8"?><root>'.str_replace(['[',']','”','”'],['<','>','"','"'], $data).'</root>');
syntax error, unexpected '[', expecting ')'
Ts.Saltan
Отправлено: 24 Февраля, 2015 - 20:06:50
Посетитель
Покинул форум
Сообщений всего: 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:
скопировать код в буфер обмена
<?
$data = '[item title="link1" image="ссылка1"]содержимое1[/item]
[item title=”111” image=”222”]содержимое2[/item]
[item title="link2" image="ссылка2"]содержимое2[/item]
[item title="link3" image="ссылка3"]содержимое3[/item]
[item title="link4" image="ссылка4"]содержимое4[/item]
[item title="link5" image="ссылка5"]содержимое5[/item]
' ;
foreach ( $xml as $k => $v ) {
echo $k . ': ' . ( string) $v . '; title:' . $v -> attributes ( ) -> title . '; image: ' . $v -> attributes ( ) -> image . PHP_EOL;
}
tyshka
Отправлено: 24 Февраля, 2015 - 20:50:08
Новичок
Покинул форум
Сообщений всего: 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/
tyshka
Отправлено: 24 Февраля, 2015 - 23:04:16
Новичок
Покинул форум
Сообщений всего: 23
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
нашел немного другое решение - сделал замену кавычек, а потом уже измененный вариант парсить
(Отредактировано автором: 25 Февраля, 2015 - 00:34:46)
tyshka
Отправлено: 25 Февраля, 2015 - 21:00:39
Новичок
Покинул форум
Сообщений всего: 23
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
есть еще вопросик...
подскажите пожалуйста
есть строка
пояснение по строке
category_* - это название категории
(в скобках) к этим категориям указывается количество тем в соответствующей категории
нужно посчитать (сложить числа в скобках) - и вывести отдельно
и разбить строку на части разделенные запятой с удалением скобок
т.е.
из приведенной выше строки получить:
$category_items = 8; // сумма цифр в скобках
и распарсенная строка:
'category_1', 'category_2', 'category_3', 'category_4', 'category_5', 'category_6'
Ts.Saltan
Отправлено: 25 Февраля, 2015 - 22:12:19
Посетитель
Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013
Откуда: Belarus
Помог: 22 раз(а)
PHP:
скопировать код в буфер обмена
$str = 'category_1(1),category_2(2),category_3(2),category_4(1),category_5(1),category_6(1)' ;
$category_items = 0 ;
foreach ( $res [ 0] as $k => $v ) {
$category_items += $res [ 2] [ $k ] ;
echo $res [ 1] [ $k ] . ', ' ;
}
echo PHP_EOL . '$category_items = ' . $category_items ;
Получается
Поиск в теме | Версия для печати
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB