Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] regexp i przepisywanie ciągów
uncuncunc
post
Post #1





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 1.04.2012

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


Czasami w skryptach widzę tablice z "aliasami" które są wyciągane przez preg_match i przypisywane do zmiennej np.

Cytat
$sprawdany_string = 'bbbaaa/21'
array('/[a-z]+\/:id/');



Zastanawiam się jak zrobić, aby sprawdzić czy ciąg pasuje do wyrażenia i aby skrypt wiedział że :id to w tym wypadku 21 i że jest to liczba czyli zakres [0-9]+ oraz aby to przypisać do jakiejś zmiennej.

Wiem jak zamienić :id na [0-9]+ to nie problem i wtedy sprawdzam czy pasuje, ale jak konkretny :id przypisać wartość ze sprawdzanego ciągu?



Tak kombinuje... zamiana :id na [0-9]+ to

  1. preg_repalce('/:id/','[0-9]+',$str);


Później sprawdzam czy $str pasuje do wyrażenia przez preg_match, jednak wcześniej chciałbym do jakiejs zmiennej przepisać wartość tego :id ... jak? np. $id = 21;

Może explode i porównywanie do tablicy? Czy PHP ma w sobie jakieś aliasy dla wyrażeń? A ja szukam nie pod tą nazwą.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
bostaf
post
Post #2





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

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


Można przekazać tą wartość po prostu z jakiejś zmiennej PHP:
  1. $id = 21;
  2.  
  3. $str = '/blog/21'
  4. $reg = '/blog/' . $id . '/';
  5. preg_match($reg, $str)

Tylko, że wtedy to jest zwykłe porównywanie łańcuchów i nie warto używać funkcji z wyrażeniami regularnymi. Jeśli chcesz sprawdzić czy w danym łańcuchu występuje konkretna wartość (inny konkretny łańcuch) to wystarczy strpos albo inna podobna funkcja albo, w skrajnym przypadku zwykłe porównanie:

  1. $id = 21;
  2. $str = '/blog/21';
  3. $reg = '/blog/' . $id;
  4. $takie_same = $str == $reg; // TRUE jeśli takie same, FALSE jeśli nie
  5. var_dump($takie_same);


Hmmm, nie jestem pewien czy nie za bardzo chcesz przekombinować. 21 (czy jakakolwiek inna liczba) to zawsze "[0-9]+" i sprawdzanie najpierw czy łańcuch spełnia wzorzec "[0-9]+" a potem czy to jest jakaś konkretna liczba jest zbędnym przetwarzaniem. Prościej od razu sprawdzić czy łańcuch zawiera daną liczbę i - dla pewności - czy jest ona w konkretnym miejscu (np.: na końcu danego łańcucha).
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 8.10.2025 - 05:07