|
|
|
| Здравствуйте, помогите получить все URL у которых в конце #usd, пример:
http://site.ru/2008/09/02/#usd
вид URL может быть абсолютно разным, т.е. уникальными признаками здесь является в начале http:// и в конце #usd | |
|
|
|
|
|
|
|
для: Mynameis
(06.09.2008 в 10:00)
| | способов много , но работа выражения
сильно зависит от того откуда нужно получать все такие URL
,) всмысле может они в тегах <a> , а может просто идут каждый отдельной строкой
вот например в тексте ,где много букв h ,)
<pre><?
list($m, $time) = sscanf(microtime(), '0%s %s');
$time .= $m; # время начала выполнения
$txt = str_repeat('http://site.ru/2008/09/01/#usd
hhhhhhh hhhhhhhhh hhhh hhhhhhh
http://site.ru/2008/09/02/#usd
hh hhhhh hhhhhhhh hhhhhhh hhhh hhhh
http://site.ru/2008/09/03/#usd
hh hhhhhhhh hhh hhhhh hhhhhh hhhh
http://site.ru/2008/09/04/#usd
hhhhh hhhh hhhhhhhhh hhh hhhhh hhhh
http://site.ru/2008/09/05/#usd
hhhh hhhhhh hhhh hhhhh hhhh hhhh
http://site.ru/2008/09/06/#usd
hhhhh hhhhhhhhhhhhh hhhhhh hhhh
http://site.ru/2008/09/07/
hhhhh hhhhhhhhh hhhhhh hhhhhhh hhh
http://site2.ru/?url=http://site.ru/2008/09/09/#usd
', 15);
$re1 = '~http://[^#\s"\'>]+#usd\b~';
// такое выражение, которое ищет сначала букву h
$re2 = '~\bhttp://[^#\s"\'>]+#usd\b~';
// или такое, начинающее искать совпадения с границы слова
# они будут работать заметно медленнее , чем такое по сути медленное выражение :
$re3 = '~(?<=\bhttp)://[^#\s"\'>]+#usd\b~';
/* которое делает шаг назад, проверяя было-ли http
, но ищет начиная с двоеточия :
, которыx не так много в тексте
*/
# вот можете попробовать, меняя $re1 , $re2 , $re3 :)
preg_match_all($re3, $txt, $out);
print_r($out);
list($m, $t) = sscanf(microtime(), '0%s %s');
printf("<hr/>%.f7\n", (($t .= $m) - $time)); # время выполнения
?></pre>
|
| |
|
|
|