Регулярного выражения вы должны не потому, что он проверяет на конец строки после ДВОЙ (см $
после se)
). Кроме того, он будет проверять только URL-адреса «linked.in».
Итак, вы должны позволить больше символов. Вот ваш fixed regex.
^(?>(?:https?|ftp):\/\/(?:(?:[a-zA-Z0-9][a-zA-Z0-9_-]*)\.linkedin\.(?:com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se))(?:(?:\/[^\/\r\n]*)*)?)$
Это соответствует как:
http://www.linkedin.com/in/johndoe
http://www.linkedin.com
sample program:
<?php
$re = "/^(?>(?:https?|ftp):\\/\\/(?:(?:[a-zA-Z0-9][a-zA-Z0-9_-]*)\\.linkedin\\.(?:com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se))(?:(?:\\/[^\\/\\r\\n]*)*)?)$/m";
$str = "http://www.linkedin.com/in/johndoe\n\nhttp://www.linkedin.com";
preg_replace_callback($re, function ($matches) {
echo "Matched: " . $matches[0] . "\n";
}, $str);
?>
Я бы сказал, что не работает для 'HTTP : // www.linkedin.com'. «$» В шаблоне, за которым следует спецификация порта, может быть переведен в «конец конца строки, за которым следует двоеточие и некоторые цифры». Но было бы трудно найти символы после того, как строка закончилась ...: -P Используйте 'parse_url' или' filter_var', как было предложено @Denis ниже. – mhall