regex — заменить все URL-адреса и электронные письма в тексте на кликабельные ссылки в переполнении стека

Исследуя информацию о регулярных выражениях в Интернете, я обнаружил эту замечательную функцию php:

function convert($input) {
$pattern = '@(http(s)?://)?(([a-zA-Z0-9])([-\w]+\.)+([^\s\.]+[^\s]*)+[^,.\s])@';
return $output = preg_replace($pattern, '<a href="http$2://$3">$0</a>', $input);
}

Я был размещен здесь на SO Геро Николов в
ЭТА ПОЧТА

Он преобразует текстовые ссылки в кликабельные ссылки, так много, как у вас в абзаце, это замечательно работает.

Тем не менее, и вот мой вопрос, когда этот код встречает адрес электронной почты, он пропускает имя перед доменом электронной почты, а также @, например, так: name @domain.com Я угадываю return часть функции должна быть изменена, чтобы включить ссылку на электронную почту, но я не уверен, как это будет интегрировано в вышеупомянутую функцию. Будет ли необходимо условное утверждение? Regex все еще новичок для меня, поэтому я не уверен, что это правильное направление.

Тогда становится странным, когда ссылка находится в конце предложения, и это предложение заключено в одинарные или двойные кавычки (как в пресс-релизе или статье). В этом случае конечная пунктуация (точка, восклицательный знак, знак вопроса и т. Д.) Включается в ссылку вместе с заключительной цитатой, например: «Обязательно посетите их веб-сайт по адресу domain.com." Если период удален, заключительная цитата все еще включена в ссылку: «Обязательно посетите их веб-сайт по адресу domain.com"

Все становится еще страннее, когда последнее слово обычного предложения (не включая текст ссылки) лежит в одинарных или двойных кавычках. Например, последнее слово с его пунктуацией и закрывающей кавычкой превращаются в ссылку как таковую: «Это первое предложение. Это второе предложение. И это последнее sentence." Если закрывающая пунктуация (точка и т. Д.) Удаляется, ссылка не создается, и на заключительную цитату не влияют: «Это первое предложение. Это второе предложение. И это последнее предложение»

Итак, еще раз, вопрос заключается в том, как изменить эту функцию для обработки адресов электронной почты, а также для того, чтобы прекратить добавлять конечную пунктуацию и закрывающие кавычки, если ссылка находится в конце предложения в кавычках? Кроме того, как его можно изменить, чтобы предотвратить превращение последнего слова с его конечной пунктуацией в ссылку, если оно находится в предложении в кавычках?

Я все еще новичок в работе с регулярными выражениями, поэтому любая помощь, ссылки, толчки в правильном направлении (я) приветствуются. Есть еще одна вещь, которую эта функция делает, она делает ссылки из телефонных номеров, разделенных точками (как в 555.555.5555 превращается в 555.555.5555) но я думаю, что проблема может подождать пока. Опять же, я не прошу переписанный фрагмент кода, но некоторые указания будут очень благодарны, так как я понятия не имею, с чего начать. Спасибо!

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector