Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Proste wyrażenie regularne prośba o pomoc
kiciafu
post
Post #1





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 11.05.2010

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


Witam,

mam dość lamerskie pytanie odnośnie wzorca, którego nie umiem stworzyć chodzi o szablon, który dopasuje się do ^\/.{1,3}\/$ tak żeby można było dopasować dowolną liczbę z przedziału od 1 do 999 chodzi mi aby uzyskać np. /123/ /456/ /10/ ale żeby nie można było dopasować /001/ /015/ itd. no i żeby wykluczyć litery. Jedyne co udało mi się stworzyć to coś co nie przyjmuje liter ale przyjmuje ciągi typu /005/.

Jakby ktoś wiedział byłbym wdzięczny
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


#\/[^0][0-9]{1, 3}\/#
Choć nie wiem o co chodzi z "wykluczeniem" liter.

Ten post edytował mortus 5.01.2012, 15:59:29
Go to the top of the page
+Quote Post
by_ikar
post
Post #3





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

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


Wykluczyć (negować) liter nie musisz, wystarczy że poszukiwać będziesz tylko cyfr.
Go to the top of the page
+Quote Post
zegarek84
post
Post #4





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


masz tu przykład w JS - to samo wyrażenie zadziała też w PHP tylko na szybko w konsoli sprawdzałem:
[JAVASCRIPT] pobierz, plaintext
  1. reg = /^(?!0+)[0-9]{1,3}$/;
  2. str = '30';
  3. console.log(reg.test(str));
[JAVASCRIPT] pobierz, plaintext


Ten post edytował zegarek84 5.01.2012, 12:40:09


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
kiciafu
post
Post #5





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 11.05.2010

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


Witam,

Dziękuję kolego zegarek84 za pomoc, moje wyrażenie wygląda tak: ^\/(?!0+)[0-9]{1,3}\/$ (kwestia slashy) działa idealnie. Temat do zamknięcia.

Pozdrawiam
Go to the top of the page
+Quote Post
zegarek84
post
Post #6





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


tak tylko podsumuję, że trochu nie wiem o co chodzi Ci z tymi slashami gdyż przy wyr. reg. można było znaki // zastąpić każdym innym np. ## - wpisałeś to be cudzysłowia - w JS to tak zadziała ale w PHP musi to być w formie tekstu (chyba, że w nowych wersjach coś zmienili i może być jak w bash'u - choć akurat z negacją nie chce mi się sprawdzać czy tam działa ale w grep trzeba by dać modyfikator -P od perl)... trochu wypiłem to może nie składnie ale co zrozumiałem na pełne wyr. reg. to dopasowanie masz na /123/ - razem ze slashami a w temacie nic o nich nie pisałeś... (niby tu to nic nie zmieni, ale naucz się przedstawiać temat rzeczowo gdyż w js czy php czy nawet w wyr. reg. mogło to mieć znaczenie)


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
kiciafu
post
Post #7





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 11.05.2010

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


Hej, będe starał się precyzyjnej okreslać w czym rzecz (nie zawsze to takie proste smile.gif Testowałem to poprzez stronkę regexp.pl, generalnie osiągnąłem to co chciałem osiągnąć strumień miał się składać z maksymalnie z pięciu znaków w tym pierwszy i ostatni to slashe a to co powmiędzy slashami to dowolna liczba z zakresu od 1 do 999 z tym że zapisywana normalnie (bez zer z przodu) tym samym zapis taki jak /123/ , /12/ , /1/ zwraca true a /001/ , /abc/ , /12b/ #123# false. Doprecyzuje jeszcze, że wyrażenie regularne nie będzie dotczyło Javy ani PHP chodzi o wyzwalacz który będzie reagował na określone zachowanie użytkownika w bazie danych mysql. Bedę to jeszcze testował ale powinno działać.
Go to the top of the page
+Quote Post
mortus
post
Post #8





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Niestety w MySQL nie można używać operatorów logicznych m. in. negacji (?!), przynajmniej na chwilę obecną. Zatem odpowiednie wyrażenie powinno wyglądać tak:
^/[1-9][0-9]{0,2}/$
lub tak:
^/[^0a-zA-Zwszystkie_znaki_specjalne][0-9]{0,2}/$
W MySQL nie ma również potrzeby używania backslash-y przed slash-ami, ponieważ slashe nie służą do ograniczania wyrażeń regularnych.

Ten post edytował mortus 10.01.2012, 23:30:52
Go to the top of the page
+Quote Post
kiciafu
post
Post #9





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 11.05.2010

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


Hej, faktycznie negacja w wyrażeniu regularnym w MySQLu nie działa, trochę to głupie ale cóż, dzięki Mortus za podpowiedź bo każdy inny regexp mi działał ale nie korzystałem z negacji w żadnym przypadku. Trigger działa jak należy tj. nie puszcza mi nic innego jak strumień spełniający warunek z regexp. Pozdrawiam

Ten post edytował kiciafu 12.01.2012, 21:48:46
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 Aktualny czas: 20.08.2025 - 04:53