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

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

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

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


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


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

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

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


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

Надеюсь Вы меня правильно поняли. Спасибо за ответы.
...
Рейтинг: 0 / 0
[php] Макросы
    #37985778
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По первой проблеме:
Код: 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
[php] Макросы
    #37985781
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По второму вопросу - не ясно, откуда берутся имена переменных?
...
Рейтинг: 0 / 0
[php] Макросы
    #37985789
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам же разбор во втором случае достаточно прост. Сначала выцепляем регекспом фрагменты текста между "{" и "}", а потом експлодим их по символу "|". В итоге получаем массивы и присваиваем вашим переменным. Не ясно, как это будет происходить когда количество блоков {} в исходном тексте заранее неизвестно.
...
Рейтинг: 0 / 0
[php] Макросы
    #37985793
Infinity~
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle, по первому спасибо большое, сейчас пробовать буду.
По второму:
Название не важно, хоть случайно оно генерировалось, но надо же как то запоминать место в тексте, где {} было, может Вы что то порекомендуете? Буду очень благодарна. Спасибо Вам за ответы.
...
Рейтинг: 0 / 0
[php] Макросы
    #37985798
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В массиве хранить. А из {} просто выкусить текст
...
Рейтинг: 0 / 0
[php] Макросы
    #37985802
Infinity~
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну а как хранить? Если взять на примере:
Привет {Вова|Коля}, как дела в {университете|на работе}
Ну значения между {}, хранить будем, а вот как в массиве хранить эти места, недопоняла.
...
Рейтинг: 0 / 0
[php] Макросы
    #37986005
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А предельно тупо - позиционно. Допустим, вышеприведенная строка после выкусывания будет выглядеть так:
Код: php
1.
Привет {}, как дела в {}


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

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

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

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


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