Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Wyrażenia regularne] Wyciąganie linków
Forum PHP.pl > Forum > PHP
Babcia@Stefa
Witam, skonstruowałem wyrażenie, ale nie działa ono tak jak bym chciał..

  1. <?php
  2. preg_match_all( '|example.com([^ ]+).html|' , $this->PageContent , $Matches );
  3. ?>


Chciałbym ale nie wiem jak dać opcję że zamiast example.com może być także:
- drugastrona.com
- trzeciastrona.com

A zamiast .html także:
- .php
- .php5
- .gz

Próbowałem zamienić example.com z (example.com|drugastrona.com|trzeciastrona.com) ale PHP wypluwa komunikat:

Cytat
Unknown modifier 'd'


A innym problemem jest że zwracane wyniki są np. takie:
[0] => example.com/numbers.php
[1] => example.com/one.php example.com/two.php example.com/three

Pytania:
- Jak poprawić to wyrażenie abym mógł dodać np. drugastrona.com oraz trzeciastrona.com?
- Czy można coś zmienić w tym wyrażeniu, aby zwracało po jednym linku do każdego elementu tablicy?

Pozdrawiam, WebNuLL
zegarek84
tak jak to próbowałeś zrobić ale całe wyrażenie obejmij nie znakiem | a znakiem /

i jeśli ma szukać jeszcze kropkę to poprzedź ją znakiem \ (poczytaj o znakach specjalnych

każdy nawias jest zapamiętywany jako dodatkowa zmienna - tam gdzie nie ma być zapamiętywany dodatkowy parametr urzywaj (?:wyrażenie)
Babcia@Stefa
1. Działa
2. Nadal zwraca mi pare linków naraz...

Jak zmienić to wyrażenie aby wrzucało tylko po jednym linku do tablicy?

Teraz to tak wygląda, ale zwraca po kilka linków w jednym elemencie tablicy...

  1. <?php
  2. preg_match_all('/(jeden.com|dwa.com|example.com)([^ ]+).(html|pdf|doc)/', $this->PageContent, $Matches);
  3. ?>
zegarek84
Kod
preg_match_all('/(?:(?:jeden|dwa|example)\.com)(?:[^ ]+?(?:html|pdf|doc))?/i', $this->PageContent, $Matches);

sprawdź, podaj też przykładowy fragment źródła strony jeśli to nie działa....
Babcia@Stefa
Cytat(zegarek84 @ 18.03.2009, 19:19:25 ) *
Kod
preg_match_all('/(?:(?:jeden|dwa|example)\.com)(?:[^ ]+?(?:html|pdf|doc))?/i', $this->PageContent, $Matches);

sprawdź, podaj też przykładowy fragment źródła strony jeśli to nie działa....


Cytat(PHP Parser)
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 16 bytes)


Coś za dużo pamięci zużywają te wyrażenia regularne blinksmiley.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.