[проблем] parse html код с regexp

spellsingero

Registered
Здравейте, два дни си блъскам главата и не мога да измисля как да стане номерчето... Значи проблемът ми е следния: имам една страница от която трябва да взема определен код, но всички други href-ове ми излизат а този - НЕ! имам следната ситуация
<a href=blqblqblq" class="balshoebuton"></a>
Е този линк трябва да взема, ако класа беше преди хреф мога да го направя, но тъй като е след хреф, а аз имам този код:

$data = file_get_contents("някъфлинк");
$pattern = "/href=[\"']?([^\"']?.*&width)[\>']?/i";

preg_match_all($pattern, $data, $matches, PREG_SET_ORDER);
$firstMatches = array_slice($matches, 0, 1);

foreach($firstMatches as $match) {
echo "$match[0]";
}

и не мога да го разгадая как при &width да стане class="balshoebuton" примерно, моля помогнете ми имам чувството, че кръвно вдигам прерових в интернет всичко възможно за прег матч и регекс ... нито един от примерите не стана за моя случай!

Благодаря ви предварително на всички.
 
Толкова много обяснение, а накрая четателя остава объркан точно какво искаш да направиш...

Искаш да мачва линкове с клас "balshoebuton" :

<a href="линк" class="balshoebuton"></a>

и да взимаш линка който сочи href-a

или да мачва линкове в които има "&width" и да им добавя клас "balshoebuton" или какво ?

Когато се прави regex шаблон трябва да се знае ясно целта, за която е направен.
 
somebody каза:
Толкова много обяснение, а накрая четателя остава объркан точно какво искаш да направиш...

Искаш да мачва линкове с клас "balshoebuton" :

<a href="линк" class="balshoebuton"></a>

и да взимаш линка който сочи href-a

или да мачва линкове в които има "&width" и да им добавя клас "balshoebuton" или какво ?

Когато се прави regex шаблон трябва да се знае ясно целта, за която е направен.

Извинявай, просто го дадох за пример с width понеже незнам как да го променя
Искам да матчвам линк с клас balshoebuton и да взема хреф-а.

<a href="alabala.net" class="balshoebuton"></a> - това представлява линка и е единствен с такъв клас в целия сорс.
 
Ако съм те разбрал правилно :

PHP:
$data = file_get_contents("някъфлинк");
preg_match_all('/<a[^<]+href="([^"]+?)"[^<]+class="balshoebuton">/',$data,$match);
foreach($match[1] as $link) {
echo $link.'<br />';
}
 
spellsingero каза:
м не иска и по този начин... :( отчаян съм и пия антидепресанти вече... хух
:/

Ето то един пример за да се убедиш, че при правилно подаден символен низ няма как да не работи

PHP:
$data = '<a href="google.bg" class="balshoebuton">линк1</a>
<a href="google.com" class="balshoebuton">линк2</a>
<a href="google.tr" class="balshoebuton">линк3</a>';
preg_match_all('/<a[^<]+href="([^"]+?)"[^<]+class="balshoebuton">/',$data,$match);
foreach($match[1] as $link) {
echo $link.'<br />';
}
От тук трябва да си направиш извод, че реда:
PHP:
$data = file_get_contents("някъфлинк");
явно не е наред.Да не би да се опитваш да взимаш съдържание от страници която изисква оторизация (регистрация) или пък страница, която задължително работи с бисквитки ?
Ако не е тайна покажи този линк, или пък виж изхода от

PHP:
echo $data;

и провери дали въобще присъстват линкове с такъв клас.
 
Понеже не съм сигурен доколко е легално това в този сайт, и затова не съм сложил истинският линк, но добре, ще го постна.

Става въпрос за хълкшер сайта, а примерната страница е следната:

http://www.hulkshare.com/g0aq9kaa7zjx

като линка присъства, да ето го:
<a href="http://www.hulkshare.com/static.php?op=hulk_on_desk_popup&file=aHR0cDovL3d3dy5odWxrc2hhcmUuY29tL2RsL2cwYXE5a2FhN3pqeC9BbmVsaXEtR290b3ZfbGlfc2kubXAzLm1wMz9kPTE%3D&file_code=g0aq9kaa7zjx&referer=&d=1" class="bigDownloadBtn"></a>

Но въпреки какви ли не еквилибристики нищо до момента не помогна. Има други начини да се сваля директно от хълкшер, но отскоро го направиха със сесия, и дефакто този линк става невалиден ако в една и съща сесия не се достигне до мп3 файла. Трябва ми просто този линк да го взема с гет файл кантентс.
 
Ненапразно ти казах да провериш какво взима функцията като низ, проблема е точно там.Това което ти дава като линк за сваляне на песента при взимане на съдържанието чрез file_get_contents() e следното:

<a href="линк" class="bigDownloadBtn basicDownload"></a>

вместо това което очакваш ти :

<a href="линк" class="bigDownloadBtn"></a>

PHP:
$data = file_get_contents('http://www.hulkshare.com/g0aq9kaa7zjx');
preg_match_all('/<a[^<]+href="([^"]+?)"[^<]+class="bigDownloadBtn basicDownload">/',$data,$match);
foreach($match[1] as $link) {
echo '<a href="'.$link.'">'.$link.'</a><br />';
}

Също, доколкото виждам в една страница имаш един подобен линк за сваляне така, че можеш да използваш preg_match вместо preg_match_all и също да не въртиш цикъл.
 

Back
Горе