Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenie regularne do wyszukiwarki
Forum PHP.pl > Forum > PHP
orson
witam

piszę wyszukiwarkę która bedzie wyławiać odpwiednie tagi z treści pytania i na tej podstawie wyszukiwać w odpowiednich bazach ... np dla takich danych (za pomocą preg_match_all) :
Kod
coś z opisu f:nazwa firmy o:pracownik2 o:pracownik2

wyciągnie mi to co po f: i to co po o: (początek jest mało ważny - na to mam łatwy sposób)
bardzo dobrze by było gdyby ten regexp dało się łatwo rozszeżyć na inne znaczniki ...

próbowałem różne kombinacje ale największym problemem jest (dla mnie przynajmniej) by nie zatrzymywał sie na "o" a dopiero na "o:" :/

pozdrawiam
siemakuba
spróbuj tak:
  1. <?php
  2. $str = 'coś z opisu f:nazwa firmy o:pracownik2 o:pracownik2';
  3. preg_match_all('/(o|f):([^ ]*)/i', $str, $match);
  4. print_r($match);
  5. ?>


wynik:
Kod
Array
(
    [0] => Array
        (
            [0] => f:nazwa
            [1] => o:pracownik2
            [2] => o:pracownik2
        )

    [1] => Array
        (
            [0] => f
            [1] => o
            [2] => o
        )

    [2] => Array
        (
            [0] => nazwa
            [1] => pracownik2
            [2] => pracownik2
        )

)


pozdr.
PHPSESSID
chyba odpada bo masz 'nazwa firmy' a nie same 'nazwa' smile.gif albo parcownik to pewnie imie i nazwisko

po ciezkich wysilkach umyslowych (hahaha) doszlem do tego:

  1. <?php
  2. $str = "lalala f:nazwa firmy o:Andrzej Lepper o:Gerwazy o:O'rson Tadeusz Van Helsing";
  3.  
  4. preg_match_all('@(?:f|o):((?:[w']{2,})(?: [w']{2,})*)@si',$str,$out);
  5.  
  6. print_r($out);
  7. ?>


output:

Kod
Array
(
    [0] => Array
        (
            [0] => f:nazwa firmy
            [1] => o:Andrzej Lepper
            [2] => o:Gerwazy
            [3] => o:O'rson Tadeusz Van Helsing
        )

    [1] => Array
        (
            [0] => nazwa firmy
            [1] => Andrzej Lepper
            [2] => Gerwazy
            [3] => O'rson Tadeusz Van Helsing
        )

)


na poczatku probowalem :
  1. <?php
  2. preg_match_all('@(?:f|o):([^(?ohmy.gif:)]*?)@si',$str,$out);
  3. ?>

i niewiem czemu tez zatrzymywalo mi sie na 'o' zamiast na 'o:' :| moze ktos wyjasni?
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.