Подскажите по регулярным ввыражениям

bobo

Новичок
Привет.

Немогу додумать, как из строки текста выдернуть корректно написанную ссылку. Не получается одно - если после ссылки есть текст, во всех остальных случаях работает. Подскажите, как дописать проверку.

Заранее благодарю!

PHP:
	$str = array(
					"efsfsd",
					"sf87sdfg",
					"d fg gfgf www.site.ru g fg gf h",	//НЕ ПРОХОДИТ
					"sfdfsg.dsg.sdfg",
					"www.",
					"http://site.ru",
					"http://",
					"sdfsdf.www.dsf",
					"ftp://ftp.si_te.ru",
					"dfgdfg.ftp.fdg",
					"www.sdfsdf",
					"dsgs g http://www.site.ru",	//ПРОХОДИТ
					"http://www.site.ru r fg gf",	//НЕ ПРОХОДИТ
					"fd dfhg ftp://",
					"ftp.",
					"ftp.site.ru",
					"https://",
					"https://si-te.ru",
					"https://site.net",
					"https://site-net.net.ne-t",
					"https://site.",
					"asdf.https://site.ru"
					
				);
	
		foreach($str as $val) {
			
			if(preg_match("/(?:^|[\n\s])((?:www\.)|(?:(ht|f)tp(s)?)(?:(\.|:\/\/)))+[-_а-яА-Яa-zA-Z0-9]*(?:\.[а-яА-Яa-zA-Z]+)[^\s]$/is",$val)) {
				
				echo $val." - ПРАВИЛЬНАЯ ссылка!</br>";
			
			}
			
			else {
				
				echo $val." - неправильная ссылка!</br>";
				
			}
			
		}
 

bobo

Новичок
Если кому интересно, получилось так:
PHP:
preg_match("/(?:^|[\n\s])((?:www\.)|(?:(ht|f)tp(s)?)(?:(\.|:\/\/)))+[\w\-]*(?:\.[а-яА-Яa-zA-Z]+)(?:\s|$)/is",$val)
Т.е. перед закрывающим слэшем добавил (?:\s|$)
 
Сверху