Автор Тема: Регулярные выражения вроде... Хотя может и нет...  (Прочитано 4931 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Nikman

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 77
  • +0/-0
  • 0
    • Просмотр профиля
Есть строка :

type=type_value size=size_value name="Name string value" ...

Нужно чтоб при проходе через некоторую функцию выходил масив елементов:
$element[\'type\']=type_value;
$element[\'size\']=size_value;
$element[\'name\']="Name string value";

Для меня вся проблема заключаеться в текстовом значении... так как там встречаються пробелы а без них это можно было реализовать с помощью explode("",$string)... а дальше уже бы разделял отдельно каждую переменную по =...

Подскажите плиз!

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
а нельзя это писать в столбик?

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
и можно поинтересоватьмся, откуда такая строка берется?

Оффлайн Nikman

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 77
  • +0/-0
  • 0
    • Просмотр профиля
RomikChef
В столбик не очень то удобно так как эта строка это параметры некоторого тега который я использую в шаблонах :)
Например:
type=new_listing name="lining name" ...
Эту строку скрипт заменяет на листинг с именем "listing name"
можно также задавать и другие параметры - size , style и тд...

Оффлайн Nikman

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 77
  • +0/-0
  • 0
    • Просмотр профиля
только вот вся проблема в том что я не знаю как разбить эту строку на части типа type=new_listing и тд.. так как по пробелам оно разбивает также и "lining name" на "listing" и на "name"

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Цитировать
Nikman:
type=new_listing name="lining name" ...



new_listing
lining name
...


[p]xml[/p]
AS IS...

Оффлайн Nikman

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 77
  • +0/-0
  • 0
    • Просмотр профиля
ThE0ReTiC
А как на меня это не очень удобно... так как переменные не стандартные и пользователь может использовать свои переменные... Так как type - это имя подключаэмого модуля а остальные переменные просто могут использовать в этом модуле и в каждом моделе разные... таким образом так не очень то и выйдет...

Оффлайн Yukko

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1586
  • +0/-0
  • 0
    • Просмотр профиля
    • http://estrabota.com.ua
$some_string = "type=type_value size=9 name=\\"Name string value\\"";
  preg_match("/^type=(\\S+) *size=(\\d+) *name=\\"([^\\"]*)\\"$/", $some_string, $match);
  print_r($match);
например, так...
работа в Украине

Оффлайн Nikman

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 77
  • +0/-0
  • 0
    • Просмотр профиля
Yukko

Неа :) Имена переменных name, size и тд не должны быть по дефолту... это должен быть универсальный скрипт который любую строку типа :

element1_name=element1_value - где element1_value может быть строкой

должен разбивать на части например $val[1]="element1_name=elemet1_value"; и потом я уже эти части разбиваю на переменную element1_name и этой переменной присваиваю её значение...

Оффлайн Bublic

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
preg_match_all("/([a-z]+)=([\\w]+) */", $some_string, $matches, PREG_SET_ORDER);

а вот так:
preg_match_all("/([a-z]+)=([\\w]+|\\"[a-zA-z\\s]+\\") */", $some_string, $match, PREG_SET_ORDER);
и строки с пробелами обработать можно.
Тогда match[0][1] будет содержать "type" из твоей строки, match[0][2] - "type_value",  match[1][1] - "size"  match[1][2] - 9 и т.д.
« Последнее редактирование: 22 Августа 2003, 18:16:06 от Bublic »

Оффлайн FreeSpace

  • Штатный лодырь
  • Ветеран
  • *****
  • Сообщений: 613
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.infinity.com.ua
Регулярные выражения вроде... Хотя может и нет...
« Ответ #10 : 23 Августа 2003, 20:40:27 »
Люди, вы чего?!
Кто учил меня велосипед не изобретать? ;)
$elements preg_split ("/\\s+/"$string);
А потом уже коцай по "="...
Программирование - это единственное искусство, которое способно воплотить столь уникальное сочетание эстетики и функциональности.

Оффлайн Yukko

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1586
  • +0/-0
  • 0
    • Просмотр профиля
    • http://estrabota.com.ua
Регулярные выражения вроде... Хотя может и нет...
« Ответ #11 : 24 Августа 2003, 12:14:50 »
FreeSpace
А ты прежде чем писать, проверь :) и посмотри что оно у тебя на тестовую строку выведет...
$some_string = "type=type_value size=9 name=\\"Name string value\\"";
$elements = preg_split ("/s+/", $some_string);
print_r($elements);

Выводит:
Array (
  • => type=type_value [1] => ize=9 name="Name [2] => tring value" )

Так что с велосипедом от Бублика лучше... он работает!
работа в Украине

Оффлайн FreeSpace

  • Штатный лодырь
  • Ветеран
  • *****
  • Сообщений: 613
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.infinity.com.ua
Регулярные выражения вроде... Хотя может и нет...
« Ответ #12 : 24 Августа 2003, 16:01:24 »
Прошу прощения, не доглядел :(

PS: форум съел \\ перед s
Программирование - это единственное искусство, которое способно воплотить столь уникальное сочетание эстетики и функциональности.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28