PDA

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


UnOuter
01.09.2009, 03:06
Здравствуйте, уважаемые программисты.

Помогите составить регулярку на PHP для такого:

имеем
<b>Линки</b></a><hr><a href="\http://site.ru/id.php?key=523169210347762514824620110374859\" class="\&quot;takru\&quot;" target="\&quot;_top\&quot;" onclick='\"javascript:' rnd(this);\="">

в итоге должны получить

http://site.ru/id.php?key=523169210347762514824620110374859



В общем извлечь ссылку из текста

Pashkela
01.09.2009, 03:26
<pre>
<?php
$a = <<<HTML
<b>Линки</b></a><hr><a href="\http://site.ru/id.php?key=523169210347762514824620110374859\" class="\&quot;takru\&quot;" target="\&quot;_top\&quot;" onclick='\"javascript:' rnd(this);\="">
"
HTML;
preg_match_all('|<b>Линки</b></a><hr><a href="\\\(.*)\\\" class="|',$a,$res);
print_r ($res[1]);
?>
</pre>

UnOuter
01.09.2009, 21:24
Спасибо, но мне кажется он немного не универсальный. То есть стоит поменяться какому-то тегу то ссылку я уже не извлеку. Хотелось бы более универсальные решения.

Спасибо.

Pashkela
01.09.2009, 21:53
оставь тогда внутри регулярки только

<a href="\\\(.*)\\\

и всё

< ahref ведь не поменяется? А вообще, прежде чем спрашивать, надо давать сразу все возможные варианты, а не только одну строчку, по идее

eLWAux
01.09.2009, 23:01
оставь тогда внутри регулярки только

<a href="\\\(.*)\\\

и всё

< ahref ведь не поменяется? А вообще, прежде чем спрашивать, надо давать сразу все возможные варианты, а не только одну строчку, по идее
сосайтнек, а что если будет <a target="_blank" href="http://google.com">.. ? даже если когда будет hREf , тоже не будет результата.
зачем такую "строгую" регулярку делать? будь попроще и делай более универсальные..

UnOuter:
/<a.+?href="(.+?)"/is

UnOuter
02.09.2009, 21:51
сосайтнек, а что если будет <a target="_blank" href="http://google.com">.. ? даже если когда будет hREf , тоже не будет результата.
зачем такую "строгую" регулярку делать? будь попроще и делай более универсальные..

UnOuter:
/<a.+?href="(.+?)"/is


Вставил сюда

preg_match_all ("/<a.+?href="(.+?)"/is", $str , $massiv);

и получаю ошибку.
Parse error: syntax error, unexpected '(' in ....


да и заметте, что в самом <a href=" есть %5C%22 как в начале так и в конце ссылки

L I G A
02.09.2009, 21:56
Вставил сюда

preg_match_all ("/<a.+?href="(.+?)"/is", $str , $massiv);

и получаю ошибку.
Parse error: syntax error, unexpected '(' in ....


да и заметте, что в самом <a href=" есть %5C%22 как в начале так и в конце ссылки
preg_match_all ('/<a.+?href="(.+?)"/is', $str , $massiv);

Tigger
02.09.2009, 22:08
UnOuter
ошибка из-за ковычек!

eLWAux
02.09.2009, 23:52
$a = '
dasasdlad jlalsdasd asdloaim dasd
asd adsda d <a href="google.com">asdqwd aoldm aikjqld qw
as<a href=\'google2.com\' >d a sd aksudmqid jlasdq d wqd aw
al;sd ;<A hReF="gOgOlE3.cOm">askd aksd mpqdio aksldj qd
';
print htmlspecialchars($a).'<br><br>';
preg_match_all ("/<a.+?href=[\"'](.+?)[\"']/is", $a , $m);
print '<pre>';
var_dump($m[1]);
print '</pre>';
dasasdlad jlalsdasd asdloaim dasd asd adsda d <a href="google.com">asdqwd aoldm aikjqld qw as<a href='google2.com' >d a sd aksudmqid jlasdq d wqd aw al;sd ;<A hReF="gOgOlE3.cOm">askd aksd mpqdio aksldj qd

array(3) {
[0]=>
string(10) "google.com"
[1]=>
string(11) "google2.com"
[2]=>
string(11) "gOgOlE3.cOm"
}