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

herr_skin

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

добрый вечер. Я мало еще программировал в php, но надо написать скрипт который будет получать значения имени юзера.
<a href=/fyc/vdp.jsp?user_id=*переменная часть ссылки*>vasilij *текст который надо получить в масив*</a>
у меня не получается написать регулярное выражение для функции preg_match_all. Вся заковырка в переменной части ссылки.
мне надо только имена юзеров если в примере то это vasilij.
Помогите мне.
 
пробывал для статичной

-~{}~ 01.12.05 20:15:

пробывал для статичного тега вроде не чего сложного:
preg_match_all ('#<p class="user">Name - ([^</>]+?)</p>#i', $file, $username);

но делаю для своего примера вот так:
preg_match_all ('<a href=/fyc/vdp.jsp?user_id[^>]*>([^</>]+?)</a>|U', $file, $username);

вот такая конструкция не работает.
 
herr_skin
1. экранируй все служебные символы (какие подскажет ссылка,которую дал тебе SiMM
)
2. [^>]* -> ([^>]*) таким образом ты выделишь первый субпаттерн
соответственно второй субпаттерн ([^<\/>]+?) и даст то что тебе нужно
3. Если сидишь под виндами, то может оказать полезным использовании проги The Regex Coach
под никсы тоже есть аналоги
 
если я правельно понял задачу :
нужно взять данные между тегов <a href=/fyc/vdp.jsp?user_id...>взять все ктоме первого слова</a>

ради спортивного интереса эту задачу попробывал решить так .
PHP:
<?

$str ='<a href=/fyc/vdp.jsp?user_id=rty>vasilij *текст который надо получить в маси3*</a>
<a href=/fyc/vdp.jsp?user_id=*переменная часть ссылки*>vasilij *текст который надо получить в масив2*</a>
<a href=/fyc/vdp.jsp?user_id=*переменная часdfть ссылки*>vasilij я вообще хз <dfgdfgdsf dfgdf d>  </a>
';
preg_match_all('/<a href=\/fyc\/vdp\.jsp\?user_id=.+?>.[^ ]+(.+?)<\/a>/is',$str,$match);
print_r($match);
?>
для всех тегов "а"
preg_match_all('/<a.+?>.[^ ]+(.+?)<\/a>/is',$str,$match);



если я не прав поправте пожалуйста
 
задача вырезать в массив ник. Я сделал так:
PHP:
<? 
 $file=file_get_contents('http://localhost');  
preg_match_all ('#<a href=/fyc/vdp.jsp\?car_id([^>]*)>([^</>]+?)</a>#i', $file, $user); 
 for ($i=0; $i< count($user[0]); $i++)    
{    
 $name = $user[2][$i];  
 echo $name;  
}  
?>
 
t3[0one]
а можеш показать что не так, т.е. что надо сделать как советовал Гравицап? У меня в моем виде все работает и находит то что надо. Без экранирования служебных символов.
 
herr_skin
Это совпадение, что твой вариант работает так как надо. Например, эта строка так же подходит под твой регэксп

<a href=/fyc/vdpxjsp?user_id

PHP:
$invstr="<a href=/fyc/vdpxjsp?car_id=123>boom tralala</a>";
$valstr="<a href=/fyc/vdp.jsp?car_id=123>boom tralala</a>";

$invre='#<a href=/fyc/vdp.jsp\?car_id([^>]*)>([^</>]+?)</a>#i';
$valre='#<a href=/fyc/vdp\.jsp\?car_id([^>]*)>([^</>]+?)</a>#i';

echo ( check_re($invre,$invstr) ? "" : "not ")."found\n";
echo ( check_re($invre,$valstr) ? "" : "not ")."found\n";
echo ( check_re($valre,$invstr) ? "" : "not ")."found\n";
echo ( check_re($valre,$valstr) ? "" : "not ")."found\n";

function check_re($re,$str){
	return preg_match($re,$str) ? true : false;  
}
 
да понял свою ошибку, спасибо. Но вот по ходу дела возник еще вопрос, а если я имею большой кусок кода непример:
$file="
<table bgcolor="#FFFFFF" width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td width="10"><img width="10" height="1" src="http://img.phpclub.ru/images/space.gif" alt=""></td><td width="100%">
.......
это кусок исходинка этой страници ..... а заканчивается она так:
........
</td><td width="10"><img width="10" height="1" src="im/x.gif"></td></tr>

</table>
";
т.е на странице этот кусок кода повторяется n-e количество раз. Это таблица в которой выводится весь ответ юзера с html тегами и тд. Как мне получить все что находится от <table bgcolor="#FFFFFF" ..... до </table> в переменную $fileout ?
 
только что то не выходит:
PHP:
preg_match_all ('#<table([^>]*)>([^</>]+?)</table>#i', $file, $out);
$output=$out[0][0];
print $output;
 
Правильно, потому что внутри таблицы то же теги есть. Тут надо смотреть по конкретному контенту. Возможно удобнее убрать все что снаружи таблицы, потому что если проедположительно внутри этой таблицы потенциально находятся вложенные таблицы, то одной регуляркой врядли выйдет - придется рекурсивно по тэговым контейнерам пробегаться. Вообще самый простой вариант

/<table>.*?<\/table>/

попробуй, может подойдет
 
[^*] - шо ето ? 8-0

Уберите немедленно.

-~{}~ 02.12.05 19:19:

Это правда смешно... и наверное интерпретируется как: класс символов, в который попадаю все символы, для которых не ограничено ограничение квантификатора. И это при том, что понятие квантификатора применимо только к последовательности символов.

Вы хоть немного представляете, как работают Ваши регулярки или наугад? Не пытайтесь засунуть в регэксп как можно больше непонятной фигни. Делайте регэкспы проще и короче: и работать быстрее будут и самому понятнее.
 
Сверху