0 / 0 / 0
Регистрация: 07.12.2019
Сообщений: 5
1

Разбитие сообщения на строки до 78 символов, а также проверка на то чтобы не разбить шаблон ##FIO##

07.12.2019, 18:11. Показов 1769. Ответов 5

Добрый день.
Есть шаблон письма HTML, который в итоге будет пересылаться с использованием сокетов.
Как я узнал согласно стандарта в теле письма должно быть не более 78 символов, два последних будут символами переноса строки и это реализовано с помощью такой функции
PHP
1
2
$newline="=\r\n";
$string=preg_replace ( '/(.{73}[^=]{0,3})/', '$1'.$newline, $string);
Так как в теле письма есть динамическая вставка через шаблон ##FIO##, то при переносе строк он иногда разбивается (в зависимости попадает ли в диапазон 73+3 символа) и я не могу сделать замену.
Как я понял это регулярное выражение значит такое:
берём любые 73 символа + 3 символа что не равны "="
Так?
И как мне изменить это выражение чтобы сам шаблон ##FIO## тоже не разбивалася?
Заранее благодарен.

Добавлено через 1 час 40 минут
Пришло осознание того, что выражение читается по другому
73любых символа и 5 символов добавляется "=\r\n", а не два как я почему-то подумал (возврат каретки CR+LF).
Что тогда значит [^=]{0,3} ?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.12.2019, 18:11
Ответы с готовыми решениями:

Разбить строку, чтобы каждые 30 символов записывались с новой строки
Как разбить большую строку в подстроку. Например есть большая строка в 32 символов и ее нужно...

Разбитие строки по 5 символов в список, с удалением лишнего
Здравствуйте! Есть строка, переданная c командной строки: import sys incoming = "" for i in...

Работа с подстроками: разбить таблицу FIO, на таблицы: F -фамилия, I - имя, O - отчество
В общем имеется БД, в ней таблица с информацией о людях, и столбец/поле - FIO, где фамилия имя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
1025 / 640 / 382
Регистрация: 07.11.2015
Сообщений: 1,029
08.12.2019, 00:44 2
Лучший ответ Сообщение было отмечено newlookbox как решение

Решение

PHP
1
$string=preg_replace ( '/.{69}(?:(?!##FIO##)[^=]){0,6}\K/', "=\r\n", $string);
1
0 / 0 / 0
Регистрация: 07.12.2019
Сообщений: 5
08.12.2019, 01:33  [ТС] 3
Спасибо за ответ, а можно объяснить пошагово само выражение?
Теперь совсем непонятно стало.
0
0 / 0 / 0
Регистрация: 07.12.2019
Сообщений: 5
08.12.2019, 14:29  [ТС] 4
* также там 66 должно быть вместо 69
а так выражение работает
Спасибо
0
0 / 0 / 0
Регистрация: 07.12.2019
Сообщений: 5
12.12.2019, 22:46  [ТС] 5
к сожалению не срабатывает правило чтобы последний символ не был равен "="
0
0 / 0 / 0
Регистрация: 07.12.2019
Сообщений: 5
16.12.2019, 13:18  [ТС] 6
Всё же выше правильный ответ был, всё работает.
Окончательный ответ под разные шаблоны вышел такой
PHP
1
$string=preg_replace ( '/.{69}(?:(?!##\w+##)[^=]){0,9}\K/', "=\r\n", $string);
Спасибо
0
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru