Forum Webscript.Ru

Программирование => PHP => Тема начата: Nikman от 22 Августа 2003, 15:36:41

Название: Регулярные выражения вроде... Хотя может и нет...
Отправлено: Nikman от 22 Августа 2003, 15:36:41
Есть строка :

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)... а дальше уже бы разделял отдельно каждую переменную по =...

Подскажите плиз!
Название: Регулярные выражения вроде... Хотя может и нет...
Отправлено: Меняздесьдавнонет от 22 Августа 2003, 15:45:18
а нельзя это писать в столбик?
Название: Регулярные выражения вроде... Хотя может и нет...
Отправлено: Меняздесьдавнонет от 22 Августа 2003, 15:45:47
и можно поинтересоватьмся, откуда такая строка берется?
Название: Регулярные выражения вроде... Хотя может и нет...
Отправлено: Nikman от 22 Августа 2003, 15:54:19
RomikChef
В столбик не очень то удобно так как эта строка это параметры некоторого тега который я использую в шаблонах :)
Например:
type=new_listing name="lining name" ...
Эту строку скрипт заменяет на листинг с именем "listing name"
можно также задавать и другие параметры - size , style и тд...
Название: Регулярные выражения вроде... Хотя может и нет...
Отправлено: Nikman от 22 Августа 2003, 16:03:23
только вот вся проблема в том что я не знаю как разбить эту строку на части типа type=new_listing и тд.. так как по пробелам оно разбивает также и "lining name" на "listing" и на "name"
Название: Регулярные выражения вроде... Хотя может и нет...
Отправлено: ThE0ReTiC от 22 Августа 2003, 16:42:27
Цитировать
Nikman:
type=new_listing name="lining name" ...



new_listing
lining name
...


[p]xml[/p]
Название: Регулярные выражения вроде... Хотя может и нет...
Отправлено: Nikman от 22 Августа 2003, 16:56:20
ThE0ReTiC
А как на меня это не очень удобно... так как переменные не стандартные и пользователь может использовать свои переменные... Так как type - это имя подключаэмого модуля а остальные переменные просто могут использовать в этом модуле и в каждом моделе разные... таким образом так не очень то и выйдет...
Название: Регулярные выражения вроде... Хотя может и нет...
Отправлено: Yukko от 22 Августа 2003, 17:15:19
$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 от 22 Августа 2003, 17:23:16
Yukko

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

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

должен разбивать на части например $val[1]="element1_name=elemet1_value"; и потом я уже эти части разбиваю на переменную element1_name и этой переменной присваиваю её значение...
Название: Регулярные выражения вроде... Хотя может и нет...
Отправлено: Bublic от 22 Августа 2003, 17:32:54
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 и т.д.
Название: Регулярные выражения вроде... Хотя может и нет...
Отправлено: FreeSpace от 23 Августа 2003, 20:40:27
Люди, вы чего?!
Кто учил меня велосипед не изобретать? ;)
$elements = preg_split ("/\\s+/", $string);
А потом уже коцай по "="...
Название: Регулярные выражения вроде... Хотя может и нет...
Отправлено: Yukko от 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 (
Так что с велосипедом от Бублика лучше... он работает!
Название: Регулярные выражения вроде... Хотя может и нет...
Отправлено: FreeSpace от 24 Августа 2003, 16:01:24
Прошу прощения, не доглядел :(

PS: форум съел \\ перед s