Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вытащить из ссылки текст и адрес в двумерный массив
 
 автор: P@Sol   (11.05.2006 в 17:13)   письмо автору
 
 

<a href=адрес>текст</a>
как из нескольких таких ссылок сделать массив (лучше двумерный - $out[1][0] - адрес, $out[1][1] - текст. Это не обязательно), состоящий из "адрес" и "текст"?
<?
pattern 
"|<a href=\"([^\"]+)\"[^>]+>(.*)</a>|isU";
  
preg_match_all($patternstrip_tags($content,'<a>'), $out);
  echo 
"<pre>";
  
print_r($out);
  echo 
"</pre>";

выводит почему-то не все ссылки,
<?
$pattern 
"|<a[^>]+>(.*)</a>|isU"

так выводятся все ссылки

   
 
 автор: Trianon   (11.05.2006 в 17:44)   письмо автору
 
   для: P@Sol   (11.05.2006 в 17:13)
 

вот несколько причин.
1. href может быть не первым атрибутом. К примеру, перед href может стоять target.
2. перед href может стоять не пробел, а допустим, разрыв строки.
3. значение href может быть обрамлено не в кавычки,а в апострофы. Или не обрамлено вовсе.

   
 
 автор: P@Sol   (15.05.2006 в 09:44)   письмо автору
 
   для: Trianon   (11.05.2006 в 17:44)
 


<a href="station.php?nnst=79310">слова</a>

   
 
 автор: kasmanaft   (15.05.2006 в 10:12)   письмо автору
 
   для: P@Sol   (15.05.2006 в 09:44)
 


$pattern = "|<a href=\"([^\"]+)\"[^>]+>(.*)</a>|isU";

"+" в регулярных выражениях означает "хотя бы один раз" - то есть в адресе после
href="station.php?nnst=79310"
по приведенному выр-ю должны стаять еще какие-нибудь символы, кроме ">", коих в приведенном адресе нет.

в данном случае нужно испольховать "*" - ноль или более раз, то есть вот так:

$pattern1 = "|<a href=\"([^\"]+)\"[^>]*>(.*)</a>|isU";

   
 
 автор: P@Sol   (15.05.2006 в 10:17)   письмо автору
 
   для: kasmanaft   (15.05.2006 в 10:12)
 

спс

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования