[PHP] wyrażenia regularne a HTTP GET

0

Witam
Mam problem z użyciem wyrażeń regularnych w połączeniu z danymi pobieranymi przez HTTP.

Wyrażenie regularne działa prawidłowo dla stringa zapisanego w kodzie, nie chce natomiast współpracować z tekstem pobranym z sieci.
Do pobrania danych używam klasy HTTP_Client z repozytorium PEAR.

Przykład poniżej pokazuje o co mi chodzi. Najpierw pobieram kod strony http://www.google.pl/
Następnie chciałbym przy pomocy wyrażenia regularnego pociąć kod na 3 części: od początku do znacznika <head>, od <head> do </head> i od </head> do końca. Niestety, to nie działa, preg_replace zwraca identyczny kod jak ten podany na wejściu.
Wyrażenie regularne jest raczej poprawne - w ostatniej linii jest przykład tnący w ten sam sposób zhardkodowanego stringa i działa poprawnie.

 
<?php
require_once 'HTTP/Client.php';
 
$http = new HTTP_Client();

$http->get('http://www.google.pl/');
$response=$http->currentResponse();
echo '<p style="font-size:10px;">Received data:<br>';
echo '<br>--------------------------------------------------------<br>';
echo htmlspecialchars($response['body']);
echo '<br>--------------------------------------------------------<br>';
echo '<br>Replace<br>';
echo htmlspecialchars(preg_replace('/(.*)<head>(.*)<\/head>(.*)/', '#1[$1]    #2[$2]    #3[$3]', $response['body']));
echo '<br>--------------------------------------------------------<br>';
echo '<br>Comparision<br>';
echo preg_replace('/(.*)<head>(.*)<\/head>(.*)/', '#1[$1]    #2[$2]    #3[$3]', 'DANE PRZED <head> NAGLOWEK </head> DANE PO');
?>
 

Czy wie ktoś czemu to nie działa?
Pozdrawiam

0

dopisz "s" na samym końcu wyrażenia regularnego

0

Wygląda na to że pomogło, ale dokładniejsze testy zrobię rano, dzięki :-)

btw, w dokumentacji regexpów Perla (http://www.perl.com/doc/manual/html/pod/perlre.html), jest lista modyfikatorów, wśród których jest przełącznik "s". Nie rozumiem jednak gdzie należy umieszczać te przełączniki (zawsze na końcu?) - mógłby mi to ktoś wyjaśnić?

0

@VertexShader:
Nie pytaj się nas, tylko dokumentacji PHP :).

Konkretnie obczaj sobie to:
http://pl.php.net/manual/en/intro.pcre.php

The expression must be enclosed in the delimiters, a forward slash (/), for example. [...]

The ending delimiter may be followed by various modifiers that affect the matching. See Pattern Modifiers.

Ty akurat za ograniczniki używasz znaku, który podali za przykład -- slasha / (i dobrze, to dość standardowy wybór). Piszą tam, by modyfikatory ("przełączniki") umieszczać za zamykającym ogranicznikiem. Więc odpowiedź na Twoje pytanie brzmi: tak, zawsze na końcu.

0

Oj, chyba dała mi się we znaki późna pora :-P Manuala ofc postiudiuję.
A, no i przedstawione wyżej rozwiązanie zadziałało również w moim kodzie głównym. Dzięki :-)

Z mojej strony koniec tematu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1