Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PCRE: jak napisac rownanie (ZMIENNA)(zaznacz)(ZMIENNA)
Forum PHP.pl > Forum > PHP
hihihi
Witam,

Mam taki maly problem,
otoz nie mam pojecia, jak napisac rownanie dla takiego tekstu

  1. Witaj Marek, Twoje saldo to 493pln. Marek jest ok


Gdzie obecna moja skladnia PCRE to

/Witaj (.*),(.*)////////JAK ZROBIC odwolanie do zmiennej $1 ?

Chodzi mi o to, aby zaznaczyc wszystko co jest pomiedzy slowem Marek. Czyli ", Twoje saldo to 493pln. "

Problem tkwi w tym, ze imie sie zmienia dla kazdego uzytkownika. Ma ktos jakis pomysl??

Z gory dziekuje
nexis
  1. <?php
  2. $text    = 'Witaj Marek, Twoje saldo to 493pln. Marek jest ok';
  3. $name    = 'Marek';
  4. $pattern = sprintf('/%1$s(.*)%1$s/', $name);
  5. preg_match($pattern, $text, $matches);
  6. echo $matches[1];
  7. ?>
hihihi
Wiem, ze tak można.

Ale załóżmy, że "Marek" to zmienna. Równie dobrze, może to być Zbychu czy Zdzichu.

Czy da sie taki myk zrobic w pcre czy trzeba kombinować?

Nie jestem pewien, czy można takie równanie napisac w pcre, tak aby IMIE było zmienną o różnych wartościach. Załóżmy że IMIE to [a-zA-Z0-9]

więc jak można odwołać się do zmiennej ?

thx
nexis
Cytat(hihihi @ 29.05.2009, 22:13:16 ) *
Ale załóżmy, że "Marek" to zmienna.

A w moim kodzie niby czym jest?
Cytat(hihihi @ 29.05.2009, 22:13:16 ) *
Równie dobrze, może to być Zbychu czy Zdzichu.

Taka jest właśnie natura zmiennej.

Możesz jeszcze wyszukać imienia, ale na podstawie informacji, które podałeś, trudno stwierdzić jaką formę może przyjąć całe wyrażenie, w którym szukamy, ale może mimo wszystko przyda ci się poniższe rozwiązanie:

  1. <?php
  2. // Wyrażenie
  3. $text    = 'Witaj Marek, Twoje saldo to 493pln. Marek jest ok';
  4. // Szukanie imienia
  5. $pattern = '/Witaj ([a-z]{3,})/i';
  6. preg_match($pattern, $text, $matches);
  7. $name    = $matches[1];
  8. // Szukanie tekstu
  9. $pattern = sprintf('/%1$s(.*)%1$s/', $name);
  10. preg_match($pattern, $text, $matches);
  11. echo $matches[1];
  12. ?>


Tutaj wychodzimy z założenia, że ciąg zaczyna się zawsze słowem Witaj, a następnie jest imię, które składa się wyłącznie ze znaków A-Z i ma conajmniej 3 znaki.
hihihi
Thx.

smile.gif Ale chodzi mi, czy mozna to zrobic jednym poleceniem preg ?
hihihi
Cytat(belliash @ 30.05.2009, 15:32:47 ) *
a iloma jest zrobione? :|
poducz sie podstaw programowania...


w powyzszym przykladzie, uzywamy dwa razy funkcji preg_match

1 by wyznaczyc imie
2 by wyznaczyc tekst

Nie neguje tego, bo przyklad dziala wysmienicie.

Ale czy skladnia PCRE, umozliwia ominiecie 1 kroku (wyznaczenia tekstu bez wyznaczania imienia)?
hihihi
Cytat(belliash @ 30.05.2009, 16:18:31 ) *
Jezeli wiesz jakie jest imie (bo musisz wiedziec skoro wyswietlasz) to po co chcesz je pozniej wyluskiwac? :|


Wiem, ze masz racje. Ale to byl prosty przyklad, nie zupelnie o to mi chodzi. Zalozmy, ze musze wyluskiwac... da rade to zrobic PCRE?
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.