Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > регулярные выражения


Автор: ilya_cska 14.9.2008, 10:41
есть строка
Код

$str  = "(http://www.test1.ru)(http://www.test2.ru)";

как сделать, чтоб первый url записывался в массив под индексом [0],  второй [1] и т.д.

Код

preg_match_all("(http://www.*[\w]+.*[\w]+)", $str,  $ret);
//т.е чтоб возвращало
//$ret[0] = "http://www.test1.ru";
//$ret[0] = "http://www.test2.ru";


разделение между url может быть другое, без разницы.

Автор: Sunvas 14.9.2008, 10:52
Цитата(ilya_cska @  14.9.2008,  10:41 Найти цитируемый пост)
разделение между url может быть другое, без разницы.

В твоем случае, проще всего не мучить preg_match, а воспользоваться http://ua.php.net/explode.

Код

$s='(http://www.test1.ru)(http://www.test2.ru)';
$s=rtrim($s,')');
$s=ltrim($s,'(');
$s=explode(')(',$s);

Автор: ilya_cska 14.9.2008, 13:19
а если неизвестно, сколько может быть адресов, т.е. получаю динамически, для каждой записи в таблице может быть или один, или несколько.

Автор: Sunvas 14.9.2008, 13:38
ilya_cska, все-равно сколько будет адресов. Я не даром опубликовал ссылку на описание функции explode. Читаем, задаем вопросы, если таковые имеются.

Автор: ilya_cska 14.9.2008, 13:48
понял, спасиб.

Автор: getme 14.9.2008, 16:21
все же регом красивей будет, 

Код

preg_match_all("!(\(.+\))\s*!U", $str,  $ret);


использовать надо квантификатор жадности - U

Добавлено через 52 секунды
ссори \s там не нужен

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)