Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [preg_match_all] złe parsowanie
sebekzosw
post 30.09.2014, 15:21:09
Post #1





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

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


Witam,

mam skrypt:

  1. $content = 'To jest [code-one word="test"]problematyczne[/code-one] super [code-one word="hehe"]zadanie[/code-one]. Które źle działa';
  2.  
  3. preg_match_all('/\[code-one word="(.*)"](.*)\[\/code-one]/i', $content, $matches);
  4.  
  5. echo '<pre>';
  6. print_r($matches);
  7. echo '</pre>';


efekt:

Kod
Array
(
    [0] => Array
        (
            [0] => [code-one word="test"]problematyczne[/code-one] [code-one word="hehe"]zadanie[/code-one]
        )

    [1] => Array
        (
            [0] => test"]problematyczne[/code-one] [code-one word="hehe
        )

    [2] => Array
        (
            [0] => zadanie
        )

)


które mi parsuje tekst. powinien mi wyciągnąć wyrażenia "problematyczne" i "zadanie" jednak coś źle działa.

Prawdziwe zastosowanie powinno być:

  1. preg_replace('/\[code-one word="(.*)"](.*)\[\/code-one]/i', '$2', $content);
- usuwać tagi i wyciągać tekst

Co może być złe?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
by_ikar
post 30.09.2014, 18:04:42
Post #2





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Kropka w regexpie oznacza "wszystko" a asteriks (gwiazdka) oznacza zero lub więcej. Jest to tak zwane wyrażenie regularne zachłanne, które łapie więcej niż byśmy chcieli. Jak rozwiązać twój problem? Zachłanne wyrażenia można albo zmniejszyć im zakres wyszukiwania, poprzez dodanie znaku zapytania, albo zbudować bardziej logiczne wyrażenie.

Twój przykład: http://www.regexr.com/39jj0
przykład z ograniczonym wyrażeniem: http://www.regexr.com/39jj3
przykład z bardziej logicznym wyrażeniem: http://www.regexr.com/39jj6

polecam testować swoje wyrażenia na stronach typu regexer.com które ci dodatkowo podpowiedzą, dlaczego twoje wyrażenie działa w taki a nie inny sposób. Oczywiście trzeba mieć na uwadze że implementacja wyrażeń regularnych w php i w javascript jest nieco różna, ale w większości przypadków będziesz mógł przetestować swoje wyrażenia.
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 08:05