![]() |
![]() ![]() |
![]() |
![]()
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
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ą. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Jeśli dobrze rozumiem pytanie, to funkcją której szukasz jest preg_match, wywołana z trzecim argumentem. Pamiętaj, żeby odpowiednio skonstruować wyrażenie regularne - używaj nawiasów okrągłych do grupowania podciągów, które potem przechwytywane są do trzeciego parametru funkcji preg_match.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 102 Pomógł: 0 Dołączył: 1.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Tak wiem np.
Pobierze mi :id w tablice... ALE jak teraz sprawdzić czy pod :id kryje się odpowiednie wyrażenie [0-9]+ i jest nim 21 z podanego ciągu który musi się zgadzać? To ma wyglądać tak:
czyli skrypt ma to widzieć jak
Chodzi o to aby nie pisać w wyrażeniu [0-9]+ tylko :id, taki alias, zamiennik. |
|
|
![]()
Post
#4
|
|
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:
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:
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). |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
http://pl1.php.net/preg_match#example-4791
Przypisz do :id wartość [0-9]+ zamień to poźniej w wyrażeniu przez preg_repalce na (?P<id>[0-9]+) i takie gotowe wyrażenie przepuść przez preg_match. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 19:56 |