Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> preg zero powtórzeń
DarK MaN
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 4.10.2004

Ostrzeżenie: (0%)
-----


Witam.Potrzebuje wyrażenie które doda do linka adres ale tylko jeśli link nie zaczyna się na http.
Napisałem coś takiego ale jak można się domyślać nie działa winksmiley.jpg

  1. <?php
  2. $buttons1 = '<a href="http://jakis_host.pl/folder/plik.htm" target="_blank">';
  3. //$buttons2 = '<a href="/folder/plik.htm" target="_blank">';
  4.  
  5.  
  6. $url = "http://jakis_host.pl";
  7. $pattern = '@href="(?:[^h]?[^t]?[^t]?[^p]?)@';
  8. $pattern2 = '@href="(?:http){0}@';
  9. $replacement = 'href="'.$url;
  10.  
  11. $buttons = preg_replace($pattern1,$replacement1,$buttons);
  12.  
  13. echo($buttons);
  14. ?>


W pierwszym przypadku ($button1) nie powinno dodać url natomiast w drugim ($button2) url już powinien być dodany. Napisałem dwa wzory ($pattern1 i $pattern2) ale żaden z nich nie działa poprawnie. Macie może jakiś pomysł jak napisać takie wyrażenie?
Go to the top of the page
+Quote Post
missile
post
Post #2





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 12.11.2005
Skąd: hen hen

Ostrzeżenie: (0%)
-----


Trzeci parametr funkcji preg_replace jest zmienną zawierającą ciąg do sprawdzenia. W Twoim przypadku jest to $buttons do której nie przypisujesz żadnej wartości...


--------------------
Ważne, by mieć cel... Bo czym jest życie bez niego...
Go to the top of the page
+Quote Post
DarK MaN
post
Post #3





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 4.10.2004

Ostrzeżenie: (0%)
-----


Ten błąd wynikł akurat przy przepisywaniu kodu na forum alby był czytelniejszy. Nie zmienia to jednak faktu ze wzorce nie działają. Niżej zamieszczam poprawiony kod
  1. <?php
  2. $buttons1 = '<a href="http://jakis_host.pl/folder/plik.htm" target="_blank">';
  3. //$buttons2 = '<a href="/folder/plik.htm" target="_blank">';
  4.  
  5.  
  6. $url = "http://jakis_host.pl";
  7. $pattern1 = '@href="(?:[^h]?[^t]?[^t]?[^p]?)@';
  8. $pattern2 = '@href="(?:http){0}@';
  9. $replacement1 = 'href="'.$url;
  10.  
  11. $buttons = preg_replace($pattern1,$replacement1,$buttons1);
  12.  
  13. echo($buttons);
  14. ?>
Go to the top of the page
+Quote Post
bendi
post
Post #4





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


look behind assertions (niestety nie znam tłumaczenia)
  1. <?php
  2. $s = '<a href="/folder/plik.htm" target="_blank">';
  3. $sRegExp = '#href=("|')(?<!http://)(.*?)1#';
  4. $sUrl = "http://jakis_host.pl";
  5.  
  6. echo preg_replace( $sRegExp, 'href=1' . $sUrl . '21', $s );
  7.  
  8.  
  9. ?>


--------------------
Go to the top of the page
+Quote Post
jarrod
post
Post #5





Grupa: Zarejestrowani
Postów: 312
Pomógł: 9
Dołączył: 14.10.2006
Skąd: warszawa

Ostrzeżenie: (0%)
-----


jakoś powyższe funkcje nieprawidłowo reagują kiedy w linku już jest http...

Wyrażenie
  1. <?php
  2. $pattern1 = '@href="(?:[^h]?[^t]?[^t]?[^p]?)@';
  3. ?>

jest raczej pomyłką. No chyba że link np: "cos/http/folder/plik.htm" nie może się zdarzyć.

eregi" title="Zobacz w manualu php" target="_manual to bardzo fajna funkcja którą można sprawdzić czy jakiś string występuje w innym stringu.
Jeżeli nie to podejmujesz odpowiednie działanie.

  1. <?php
  2. $buttons = '<a href="cos/http/folder/plik.htm" target="_blank">';
  3. if(!eregi('http://',$buttons))
  4. {
  5. $pa = '/href="/';
  6. $re = 'href="http://jakis_host.pl/';
  7. $buttons = preg_replace($pa,$re,$buttons);
  8. }
  9. ?>

Oczywiście "htmlspecialchars" jest tu tylko po to aby kod ładnie się pokazał w przeglądarce winksmiley.jpg

Ten post edytował jarrod 20.10.2006, 02:00:51
Go to the top of the page
+Quote Post
DarK MaN
post
Post #6





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 4.10.2004

Ostrzeżenie: (0%)
-----


Cytat(DarK MaN @ 18.10.2006, 15:04:14 ) *
Ten błąd wynikł akurat przy przepisywaniu kodu na forum alby był czytelniejszy. Nie zmienia to jednak faktu ze wzorce nie działają. Niżej zamieszczam poprawiony kod
  1. <?php
  2. $buttons1 = '<a href="http://jakis_host.pl/folder/plik.htm" target="_blank">';
  3. //$buttons2 = '<a href="/folder/plik.htm" target="_blank">';
  4. $url = "http://jakis_host.pl";
  5. $pattern1 = '@href="(?:[^h]?[^t]?[^t]?[^p]?)@';
  6. $pattern2 = '@href="(?:http){0}@';
  7. $replacement1 = 'href="'.$url;
  8.  
  9. $buttons = preg_replace($pattern1,$replacement1,$buttons1);
  10.  
  11. echo($buttons);
  12. ?>

NIe działa

Jeśli chodzi o eregi to nie pasuje mi bo jeśli mam dokument html i w nim różne rodzaje linków (te z http i bez) to nie bardzo mnie ta funkcja ratuje.

Macie jeszcze jakiś pomysł w jaki sposób zanegować wyrażenie w regularne?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 05:31