X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> regexp
Letmetouchyou
Letmetouchyou
Topic Starter сообщение 6.7.2010, 1:34; Ответить: Letmetouchyou
Сообщение #1


{#user:name loop=4 require_file=index.php}

нада распихать в перемнную output так:
[PHP]$output['todo'] = 'user'
$output['what'] = 'name'
$output['param'] = 'loop=4 require_file=index.php';[/PHP]

но ето строка не сотоянна, она может быть в минимальном состоянии такая:
{#user}
тогда остальные поля должны быть false или ''

сделал ето так
[PHP]$f='{#user:name loop=4 require_file=index.php}';
preg_match_all('/{#(\s*?)(?<todo>\w*)(:?)(?<what>[a-zA-Z0-9\.\-\=\_\\/\\\:]*)(\s*?)(?<param>[a-zA-Z,0-9\.\=\-\_\s\_\\/\\\:]*)(\s*?)}/', $f, $output);[/PHP]

все работает.
только не нравится само регулярное выражение.

можно ли его какибудь упростить?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
сообщение 6.7.2010, 9:40; Ответить: ZhukV
Сообщение #2


Letmetouchyou, не очень то понял вопроса... :rolleyes:

[PHP]
$TEXT = "{#user:name loop=4 require_file=index.php}";
//$TEXT = "{#user:name}";
//$TEXT = "{#user}";
$PATTERN = '/#([^(:|})]+):?([^(\s|})]+)?\s?([^}]+)?/';
if(preg_match($PATTERN, $TEXT, $m)){
$output['todo'] = $m[1];
$output['what'] = $m[2] ? $m[2] : false;
$output['param'] = $m[3] ? $m[3] : false;
print_r($output);
}else{ echo "No"; }
[/PHP]
Вроде ничего лишнего.


Если уж те нужно будет произвести парсер HTML страницы, и оттуда вытаскать все элементы, тогда лучше взгляни в сторону PHP Simple HTML DOM Parser. Очень полезная вещь при парсингу любого HTML!!!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
Topic Starter сообщение 6.7.2010, 17:57; Ответить: Letmetouchyou
Сообщение #3


о, это на много лутше))
только не правильно работает
если напрмиер:
{#user loop=5 file:sdas}

должно раскидать:
[PHP]$output['todo'] = 'user';
$output['param'] = 'loop=5 file:sdas'[/PHP]

а шас кидает все в todo
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
сообщение 6.7.2010, 18:15; Ответить: ZhukV
Сообщение #4


Поменяй:
[PHP]
$PATTERN = '/#([^(:|})]+):?([^(\s|})]+)?\s?([^}]+)?/';
[/PHP]
на
[PHP]
$PATTERN = '/#([^(:|}|\s)]+):?([^(\s|})]+)?\s?([^}]+)?/';
[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
Topic Starter сообщение 6.7.2010, 18:27; Ответить: Letmetouchyou
Сообщение #5


ZhukV, буду очень признателен, если объяснишь по элеметам саму регулряку ))

или хотябы первый куоск
([^(:|}|\s)]+)

как то регулрярные выражения не даються >.<
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
сообщение 6.7.2010, 18:39; Ответить: ZhukV
Сообщение #6


Ладно, поехали :)

Вот сам код регулярки:
/#([^(:|})]+):?([^(\s|})]+)?\s?([^}]+)?/

Наверное ты знаеш, что то, что находится в круглых скобках, потом выносится в массив, если он был задан.
Так вот, сначала мы ищем вхождение символа # и после него роем дальше.
([^(:|}|\s)]+)

Этот участок мы выносим в массив, ключ которого будет 1
Все что находится в квадратных масках подлежит маске, так называемому шаблону.
Обычно указывают [a-zA-Z], что означает все англ симовлы. Здесь и можна указывать все символы, которые ДОЛЖНЫ всречатся.
Но у нас немного по другому.
Сначала стоит знак ^, который обозначает, что все символы кроме....
Значит у нас будут подлежать симовлы кроме (:|}|\s), инными словами можна сказать : or } or \s. Если таков символ был найден, он сразу переходит далее.
Сам плючик обозначает, что может быть многовато символов.
Далее у нас
:?

Это обозначает, что символ двоеточия может быть, а может и не быть. хи-хи. Ну вот и пример:
{#user}

Символа двоеточие нет же, а регулярка совпадет.
Можна подставлять не только символы, а и целые маски.
[PHP]
([^(\s|})]+)?
[/PHP]
Почти тоже самое что и первое, вот только за исключением пробельного сивола (\s|})
В конце стоит знак вопроса, тоесть может быть, а может и не быть.
И последние, так же.


Letmetouchyou, если честно, регулярки обяснять тяжеловато, в них просто нужно вехать и немного знать правил.
Лично я учился на php.su и толком вехал примерно через два дня. Вот только правила бывало что забывал.
УДАЧИ
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
Topic Starter сообщение 6.7.2010, 18:43; Ответить: Letmetouchyou
Сообщение #7


ZhukV, год назад у меня php.su работал)

шас с трех кампов Server n0t found >.<
((
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
сообщение 6.7.2010, 18:50; Ответить: ZhukV
Сообщение #8


Letmetouchyou, Сейчас уже бегу с работы додмой, вдома нета нету. Если что, стучи завтра в асю, как смогу обяснить, так и обясню. Ок?

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


 



RSS Текстовая версия Сейчас: 19.4.2024, 19:28
Дизайн