Я концентрирую свой ответ на попытке избежать спамеров. Это приводит к двум дополнительным предположениям: поэтому люди, использующие систему, будут активно пытаться нарушить ваш чек, и ваша цель - только обнаружить наличие URL, а не извлечь полный URL. Это решение выглядело бы иначе, если бы ваша цель была чем-то другим.
Я думаю, что ваша лучшая ставка будет на ДВУ. Существуют двухбуквенные нДВУ и сравнительно небольшой список (в настоящее время). Они должны начинаться с точки или с суффикса или какой-либо границы слова. Как отметили другие, это не будет идеальным. Нет никакого способа получить «покупать забавные фармацевтические препараты. Это», не отказываясь от законного «я попробовал снова. Это не работает» или подобного. Все это сказал, это было бы мое предложение:
[^\b]\.([a-zA-Z]{2}|aero|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel)[\b/]
Вещи, которые это получит:
Это, конечно, сломается, как только люди начнут запутывать свои URL, заменяя "." с "точкой". Но, опять же, если предположить, что ваша цель - спамеры, если они начнут делать подобные вещи, их рейтинг кликов упадет еще на пару порядков до нуля. Множество людей, достаточно информированных, чтобы деобфусцировать URL, и множество людей, недостаточно информированных, чтобы посещать спам-сайты, я думаю, имеет крошечное пересечение. Это решение должно позволить вам обнаруживать все URL-адреса, которые можно копировать и вставлять в адресную строку, сохраняя при этом побочный ущерб на минимальном уровне.