Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: regexp
Forum PHP.pl > Forum > PHP
marcio
Witam mam problem nie znam sie na regex'pach a potrzebuje ich uzyc.

Tworze dynamiczne reguly dla routingu np gdy mam index.php/11,qwerty to poprostu ma to zadzialac jako regula i dziala z 2 ale:

1.)Gdy po ciagiu qweerty dodam np 11,qwerty,34 to tak czy siak dziala (nie jest to duzy problem nawet jest ok bo gdy ktos zmieni specjalnie url nie wywali mi 503)

2.)Np 11,11 przejdzie a nie powinno a qwerty,11 nie przejdzie.

Jak poprawic to wyrazenie:
  1. if(preg_match('#[0-9]\,[a-zA-Z0-9\.\-\_]#', $route))

Probowalem z /^ i $/ lub +$/ ale nic wtedy w ogole nie dopasowywal sie.
Crozin
Jak rozumiem ciąg, który jest porównywany to "/11,qwerty", samo 11 to jakiś tam identyfikator, a qwerty to nazwa tego czegoś o id równym 11?
Kod
^/(?<id>\d+),(?<slug>[\w\-]+)$
W sumie "11,11" powinno przejść przy powyższych założenaich, bo nic nie stoi na przeszkodzie by tytuł był liczbą.
marcio
Tak masz racje tytul moze byc liczba sam zrobilem taki pattern pomylilo mi sie.

  1. preg_match('^/(?<id>\d+),(?<slug>[\w\-]+)$', '11,marcio', $match);
  2. print_r($match);

Zwraca mi:
Cytat
preg_match() [<a href='function.preg-match'>function.preg-match</a>]: No ending delimiter '^'

Poprostu chodzi mi jak zmodyfikowac moj pattern zeby nie akceptowal wiecej niz 2 czlonow rozdzielonych za pomoca przecinka.
Crozin
Rozumiem, że można nie znać za dokładnie PCRE-owskich wyrażeń, ale żeby nawet podstaw nie znać? http://www.php.net/manual/en/regexp.reference.delimiters.php
marcio
To ze nie znam nie znaczy ze nie kombinowalem, zwykle nie lece na forum pytac o cos czego nawet nie sprawdzalem i nie kombinowalem nad tym.

Wiec wybacz.

nmv robiac tak:
Kod
        preg_match('#^[0-9]\,[a-zA-Z0-9\.\-\_]$#', '11,marcio,www', $match);
        print_r($match);

Czy w jaki inny sposob zwraca mi pusta tablice.
Skoro mam 2 grupy nie chce zeby akceptowal 3 lub 4 czlona po przecinku.
Crozin
Dobra, ale teraz dostałeś już na tacy podane (w linku z mojego poprzedniego postu) co jest całą przyczyną problemu.

Cytat
Kod
        preg_match('#^[0-9]\,[a-zA-Z0-9\.\-\_]$#', '11,marcio,www', $match);
        print_r($match);
Czy w jaki inny sposob zwraca mi pusta tablice.
Skoro mam 2 grupy nie chce zeby akceptowal 3 lub 4 czlona po przecinku.
Podany ciąg nie pasuje do wyrażenia, które bardzo dokładnie określa jak ciąg ma musi wyglądać, od jego samego początku (^) do końca ($). Nie pasuje, więc i tablica z dosasowaniami jest pusta.

Swoją drogą, tutaj już użyłeś ograniczników (ang. delimiters; # w tym przypadku), a próbując korzystać z mojego wyrażenia nie wpadłeś na to?
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.