kiciafu
5.01.2012, 10:29:50
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
mortus
5.01.2012, 10:41:25
#\/[^0][0-9]{1, 3}\/#
Choć nie wiem o co chodzi z "wykluczeniem" liter.
by_ikar
5.01.2012, 10:45:18
Wykluczyć (negować) liter nie musisz, wystarczy że poszukiwać będziesz tylko cyfr.
zegarek84
5.01.2012, 12:39:43
masz tu przykład w JS - to samo wyrażenie zadziała też w PHP tylko na szybko w konsoli sprawdzałem:
reg = /^(?!0+)[0-9]{1,3}$/;
str = '30';
console.log(reg.test(str));
kiciafu
7.01.2012, 17:59:06
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
zegarek84
8.01.2012, 01:49:42
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)
kiciafu
10.01.2012, 21:25:08
Hej, będe starał się precyzyjnej okreslać w czym rzecz (nie zawsze to takie proste

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ć.
mortus
10.01.2012, 23:24:59
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.
kiciafu
12.01.2012, 14:01:38
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
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.