Я использую функцию PHP, чтобы автоматически превращать URL-адреса в текстовую строку в фактическую ссылку, на которую люди могут щелкнуть. Кажется, что это работает в большинстве случаев, однако я нашел некоторые случаи, когда это не так.Регулярное выражение автоматической ссылки
Я вообще не понимаю регулярных выражений, поэтому я надеялся, что кто-то сможет помочь мне в этом.
Вот образец, который я сейчас использую:
$pattern = "/(((http[s]?:\/\/)|(www\.))(([a-z][-a-z0-9]+\.)?[a-z][-a-z0-9]+\.[a-z]+(\.[a-z]{2,2})?)\/?[a-z0-9.,_\/~#&=;%+?-]+[a-z0-9\/#=?]{1,1})/is";
Однако здесь некоторые ссылки, которые я нашел, что эта картина не соответствует:
- www.oakvilletransit.ca - Не уверен, , но при условии, что он не соответствует из-за двухбуквенного кода страны
- www.grt.ca - Еще один домен с доменом .ca, который не работает
- Несколько других .ca a ddresses
- freepublictransports.com - Адреса без www. или http: // перед ними. Я бы хотел, чтобы они работали.
- www.222tips.com - Предполагая, что это не соответствует из-за номеров в начале адреса.
Кто-нибудь знает, как я могу изменить этот шаблон регулярного выражения, чтобы он соответствовал этим случаям?
EDIT - Он также должен соответствовать URL-адресам, которые могут иметь период в конце. Если URL-адрес является последней частью предложения, в конце может быть период, который не должен быть включен в фактическую ссылку. В настоящее время этот шаблон учитывает это также.
РЕДАКТИРОВАТЬ 2 - Я использую шаблон, как это:
$pattern = "/((http|https):\/\/)?([a-z0-9-]+\.)?[a-z][a-z0-9-]+(\.[a-z]{2,6}){1,3}(\/[a-z0-9.,_\/~#&=;%+?-]*)?/is";
$string = preg_replace($pattern, " <a target='_blank' href='$1'>$1</a>", $string);
// fix URLs without protocols
$string = preg_replace("/href='www/", "href='http://www", $string);
return $string;
Regex совет: '[s]' не надо?. Просто используйте 's?'. – Ryan
Регулярное выражение: '{1,1}' не имеет никакого смысла. И '{2,2}'. – Ryan
Хорошо, я нашел этот код в другом вопросе. Итак, измените [s]? к s? и удаление {1,1} и {2,2} не должно иметь значения? –