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

Pegiy

Guest
Конец строки в регулярном выражении

Нужно вырезать из реферера яндекса поисковую фразу.
Реферер может быть например таким
http://www.yandex.ru/yandsearch?text=Samsung+C100&stype=&nl=0
или таким
http://www.yandex.ru/yandsearch?text=Samsung+C100
Как показать, что нужный текст заканчивается либо "&" либо концом строки? Ведь [&|$] или [&|\n] не подходят
Вариант же который использую сейчас несколько громозкий
PHP:
preg_match('/text=([^&]+)&?.*$/i',$referer,$text);
 

Pegiy

Guest
Спасибо за parse_url. Действительно удобно, но этим сообщением я хотел убить двух зайцев:
второй - это как написать условие, что нужный текст (не обязательно url) заканчивается либо "&" (какой-то определенной последовательностью символов) либо концом строки?
 

Altex

Новичок
Поверь мне на слово, любая строка заканчивается концом строки ! ;)
 

Vasya

Guest
Вот такая фигня:
PHP:
<pre><?
$re = array(
"http://e.org/cool.php?one=10%26&teXt=rigHT&",
"http://e.org/cool.php?one=10%26&tEXt=righT",
"text=righT",
"TEXT=righT&wej=test&text=two&text=three&one=",
"?TEXT=righT&wej=test&text=two&text=three&one=",
"hxxp://text=@localhost/cool.php?one=1020%25&tEXt=righT&qqqq",
"http://localhost/cool.php?one=102828390%25&tEXt=",
"http://@localhost/cool.php?one=102828390%25&tEXt=%26%&",
"http://localhost/cool.php?one=102828390%25&tEXt=&zzzz",
);

foreach($re as $referer) {
	echo "s : '".$referer."'\n";
	preg_match('/text=([^&]+)&?.*$/i',$referer,$text);
	echo "1 : '";
//	array_shift($text);
	print_r($text);
	echo "'\n";
	preg_match('/\?.*text=([^&]+)/i',$referer,$text);
	echo "2 : '";
//	array_shift($text);
	print_r($text);
	echo "'\n";
	echo "------------------\n";
}

?></pre>
В результатах есть разница... Уж какой регэксп лучше -- решай сам.
Вот это "&?.*$" в первоначальном примере, конечно, лишнее.
 

Altex

Новичок
Автор оригинала: Pegiy
второй - это как написать условие, что нужный текст (не обязательно url) заканчивается либо "&" (какой-то определенной последовательностью символов) либо концом строки?
Ты можешь спросить так, чтобы ещё кто-нибудь понял?
 
Сверху