Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [php] Макросы / 16 сообщений из 16, страница 1 из 1
04.10.2012, 19:02:54
    #37984368
Infinity~
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Макросы
Здравствуйте всем, вот интересует, как сделать макросы?
Задам сразу два вопроса :)
1.
Человек вводит текст типа, "Привет {Саша|Даша|Маша}", как его записать в переменную? Записать все варианты? И как сделать чтоб записывалось неограниченное количество вариантов?)
2.
Как потом это вывести? То есть "Привет Саша" или "Привет Даша". Просто не могу понять, как запомнить место, где был макрос) Объясните пожалуйста, думала, так и не поняла. Заранее большое спасибо!
...
Рейтинг: 0 / 0
05.10.2012, 05:33:49
    #37984703
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Макросы
Infinity~,

о каких макросах вы говорите? типа как в ворде? ))

храните введенные имена в файле или в БД. и выводите их потом. кол-во будет неограниченно, хранится будут все введенные варианты
...
Рейтинг: 0 / 0
05.10.2012, 14:04:59
    #37985364
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Макросы
Infinity~Человек вводит текст типа, "Привет {Саша|Даша|Маша}", как его записать в переменную?Если на bash, тогда как тот так:
Код: sql
1.
2.
3.
$ a=`echo Привет\ {Саша,Даша,Маша}` ; echo $a
Привет Саша Привет Даша Привет Маша
$

Вы о каком языке программирования говорите?
...
Рейтинг: 0 / 0
05.10.2012, 14:26:58
    #37985404
Infinity~
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Макросы
Я о php конечно.
1.
Когда человек ввел текст такого типа:
"Привет {Саша|Даша|Маша}"
Нужно чтоб Саша, Даша, Маша, записались в аррай, то есть в тексте не будет ограничения, макросов может быть хоть сто. Вот как это реализовать с записью значений что в скобке в аррай. Пробовала через preg_match не вышло.
2.
И еще вопрос, я весь этот текст сохраняю в базу данных, как мне запомнить место где макрос был? То есть где было "{Саша|Даша|Маша}"?
Большое спасибо за ответы.
...
Рейтинг: 0 / 0
05.10.2012, 14:59:53
    #37985493
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Макросы
Infinity~Я о php конечноНу так указывайте в теме что об нем. А то серверных ЯП гора.


Infinity~Пробовала через preg_match не вышло.Показывайте, как пробовали. Примерчик сюда плиз.


Infinity~весь этот текст сохраняю в базу данных, как мне запомнить место где макрос был?Во-первых, не ясно, что такое "макрос". Что Вы под этим словом понимаете. В PHP нет такого понятия.
Во-вторых, опять же, пример в студию!
...
Рейтинг: 0 / 0
05.10.2012, 17:08:32
    #37985761
Infinity~
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Макросы
Вот пример:
Есть такой текст:
Привет друзья, мне нужно срочно {Много денег|Мало денег|Чуть денег} , помогите!
Есть такое регулярное выражение:
{\s*([^\r\n]+)}
Оно конечно выводит:
{Много денег|Мало денег|Чуть денег}

Ссылка на конструктор, где делала
Вот например будет такой текст:
Привет {Вова|Коля}, как дела в {университете|на работе}?

Так уже не будет работать регулярное выражение, вот как сделать, чтоб регулярное выражение проходилось по всему тексту, вытягивало все что в {}, и записывало его в переменную?


Теперь насчет запоминания места:
Возьмем в пример это:
Привет {Вова|Коля}, как дела в {университете|на работе}?
Я не могу так записывать в бд, мне нужно каждой {} присвоить свою переменную, то есть:
Привет $Kolya_or_Vova, как дела в $v_univere_or_na_rabote ?

Надеюсь Вы меня правильно поняли. Спасибо за ответы.
...
Рейтинг: 0 / 0
05.10.2012, 17:21:04
    #37985778
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Макросы
По первой проблеме:
Код: php
1.
2.
3.
4.
<?php
$str = 'Привет друзья, мне нужно срочно {Много денег|Мало денег|Чуть денег} , помогите! ';
preg_match_all('/[{|]([^|}]+)+/', $str, $matches);
var_dump($matches);

Выводит:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
array
  0 => 
    array
      0 => string '{Много денег' (length=22)
      1 => string '|Мало денег' (length=20)
      2 => string '|Чуть денег' (length=20)
  1 => 
    array
      0 => string 'Много денег' (length=21)
      1 => string 'Мало денег' (length=19)
      2 => string 'Чуть денег' (length=19)

Ваш массив в $matches[1]
...
Рейтинг: 0 / 0
05.10.2012, 17:22:56
    #37985781
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Макросы
По второму вопросу - не ясно, откуда берутся имена переменных?
...
Рейтинг: 0 / 0
05.10.2012, 17:30:46
    #37985789
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Макросы
Сам же разбор во втором случае достаточно прост. Сначала выцепляем регекспом фрагменты текста между "{" и "}", а потом експлодим их по символу "|". В итоге получаем массивы и присваиваем вашим переменным. Не ясно, как это будет происходить когда количество блоков {} в исходном тексте заранее неизвестно.
...
Рейтинг: 0 / 0
05.10.2012, 17:33:02
    #37985793
Infinity~
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Макросы
vkle, по первому спасибо большое, сейчас пробовать буду.
По второму:
Название не важно, хоть случайно оно генерировалось, но надо же как то запоминать место в тексте, где {} было, может Вы что то порекомендуете? Буду очень благодарна. Спасибо Вам за ответы.
...
Рейтинг: 0 / 0
05.10.2012, 17:35:55
    #37985798
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Макросы
В массиве хранить. А из {} просто выкусить текст
...
Рейтинг: 0 / 0
05.10.2012, 17:37:51
    #37985802
Infinity~
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Макросы
Ну а как хранить? Если взять на примере:
Привет {Вова|Коля}, как дела в {университете|на работе}
Ну значения между {}, хранить будем, а вот как в массиве хранить эти места, недопоняла.
...
Рейтинг: 0 / 0
05.10.2012, 20:03:15
    #37986005
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Макросы
А предельно тупо - позиционно. Допустим, вышеприведенная строка после выкусывания будет выглядеть так:
Код: php
1.
Привет {}, как дела в {}


Массив значений для нее будет такой:
Код: php
1.
2.
3.
4.
5.
6.
[0]
    [0] Вова
    [1] Коля
[1]
    [0] универе
    [1] на работе

Нулевой элемент массива (тоже массив) имплодим с "|" и пихаем внутрь первой пары {}, первый - внутрь второй и так далее. В результате получаем исходную строку.

Если хочется усложнить, тогда вместо {} можно использовать какие то спецобозначения, вроде $0, \1, %2 и т.п или непосредственно имя переменной с индексом, вроде $a[0]. Тогда будет соответствие чего-то с чем-то по индексу. Если конечно есть в этом нужный Вам смысл.
...
Рейтинг: 0 / 0
05.10.2012, 20:37:06
    #37986029
Infinity~
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Макросы
Спасибо, суть уловила, но можно практический пример? Как с помощью implode все это заменять. Спасибо что терпите мои не совсем глубокие знания php.
...
Рейтинг: 0 / 0
05.10.2012, 21:22:08
    #37986061
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Макросы
Одного implode, конечно, недостаточно для восстановления исходной строки. Впрочем, эту задачу с восстановлением я сам придумал, а что нужно Вам - кроме Вас пока никто не знает. Откройте мануал по функци, там бОльшей частью на русском написано. Обычно бывают примеры использования. Пробуйте составлять алгоритм, пробуйте писать код - и будут Вам знания и опыт. А уж если чего не получится - с примером проблемы сюда :-)
...
Рейтинг: 0 / 0
06.10.2012, 14:57:26
    #37986422
Infinity~
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Макросы
Решила проблему так:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
$s = 'Это текст письма. Вы можете его (редактировать|изменять|уродовать), да и вообще все что хотите с ним делать. ';
$random_word = preg_replace_callback('/\(  (.*?)  \)/xs', "random_words", $s);
echo $random_word;
function random_words($m)
{
	$ar = explode("|", $m[1]);
	return $ar[array_rand($ar, 1)];
}



Всем большое спасибо!
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [php] Макросы / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]