Лисю
Guest
помогите с регулярным выражением (ВВ-теги!)
звёздчки в коде я поставил, что бы этот форум не съел теги
Этот код обрамляет емейл-адрес соответствующими ВВ-тегами при записи в БД.
И справляется с этим успешно.
Но когда уж обрамлённую строку такими тегами обработать этой функцией, то она вопреки коду, снова обрамляет емейл-адрес, но игнорируя первый символ емейла.
В чем заключается смысл патерна: найти mail адрес, в начале которого НЕТ символов '=', ']' и '/'. Зачем последний - не помню.
так же и в конце емейл адреса не должно быть символов [ и ].
Пример: вводим первый раз адрес [email protected]
результат работы:
[*[email protected]][email protected][/EMAIL*]
Редактируем запись, сохраняем. Результат:
[*EMAIL=[*[email protected]][email protected][/EMAIL]][email protected][/EMAIL*][/EMAIL*]
Т.е. программа хитро делает - игнорирует первый символ i в email адресе и заменяет всё, что ей удалось найти.
Как это побороть?
Дело в том, что аналогичный код для URL
прекрасно работает!
звёздчки в коде я поставил, что бы этот форум не съел теги
PHP:
//--------------------------------------------------------------------
// Обрамляет email адрес тегами [*EMAIL=...]...[/EMAIL*]
//--------------------------------------------------------------------
function ereg_post_mail_urls($in){
echo $in = preg_replace(
"#
(?:^|[^=\\]/])
([a-z0-9_.\\-]+@[a-z0-9_.\\-]+\\.[a-z]{2,4})
(?:[^\\[\\]]|$)
#ix",
"[*EMAIL=$1]$1[/EMAIL*]",$in);
exit;
}
И справляется с этим успешно.
Но когда уж обрамлённую строку такими тегами обработать этой функцией, то она вопреки коду, снова обрамляет емейл-адрес, но игнорируя первый символ емейла.
В чем заключается смысл патерна: найти mail адрес, в начале которого НЕТ символов '=', ']' и '/'. Зачем последний - не помню.
так же и в конце емейл адреса не должно быть символов [ и ].
Пример: вводим первый раз адрес [email protected]
результат работы:
[*[email protected]][email protected][/EMAIL*]
Редактируем запись, сохраняем. Результат:
[*EMAIL=[*[email protected]][email protected][/EMAIL]][email protected][/EMAIL*][/EMAIL*]
Т.е. программа хитро делает - игнорирует первый символ i в email адресе и заменяет всё, что ей удалось найти.
Как это побороть?
Дело в том, что аналогичный код для URL
PHP:
function prefix_url($in){
$in[1] = strToLower($in[1]);
if($in[1]=="www.")
$in[1] = "http://www.";
return "[URL=$in[1]$in[2]]$in[1]$in[2][/URL]";
}
function ereg_post_urls($in){
$in = preg_replace_callback(
"#
(?:^|[^=\\]/])
(
(?:f|ht)tps?://(?:www\\.)?|www\\.
)
(
(?:[\w\\-.]+/?\\.[a-z]{2,4})/?~?
(?:[\w\\-./\\#]+)?
(?:\\?[\w\\-&=%+~;\\#]+)?
)
(?:[^\\[\\]]|$)
#ix",
"prefix_url", $in);
return ereg_post_mail_urls($in);
}