Witam.
Potrzebuje skonstruować wyrażenie regularne, które będzie wykorzystane do znalezienia odpowiedniego wyniku przez zapytanie MySQL.
Powiedzmy, że mam taki ciąg wejściowy: AAABBBCCCDDD (docelowy ciąg może składać się z dowolnych liter i cyfr).
Natomiast w bazie chce znaleźć ciąg który będzie odpowiadał temu powyższemu oraz będzie zawierał znak "#" pomiędzy którymś z elementów ciągu (na jednej lub więcej pozycjach)
Teoretycznie moje zapytanie mogłoby wyglądać tak: A[#]?A[#]?A[#]?B itd. to jednak stwarza ten problem, że wyrażenie to zostanie dopasowane również do ciągu, w którym ani razu nie wystąpi znak "#".
Jak więc stworzyć wyrażenie, które dla całej długości ciągu będzie wymagało wystąpienia danego znaku chociaż raz?
rossol
8.02.2012, 19:30:12
Źródło
http://pl.wikibooks.org/wiki/PHP/Podstawy_...%84_regularnychCytat
Kwantyfikator umieszczamy po znaku lub klasie dozwolonych znaków, zatem nasze wyrażenie będzie miało postać /^[0-9]{1}$/. W wyrażeniach regularnych można stosować kilka predefiniowanych kwantyfikatorów:
* - 0 lub więcej
+ - 1 lub więcej
? - 0 lub 1 (uwaga: znak ten jest także wykorzystywany w innym kontekście)
tehaha
9.02.2012, 00:30:22
nie wiem czy da się to zrobić z wyrażeniem regularnym, ale możesz zastosować to wyrażenie, które podałeś i dołożyć do tego drugi warunek używając funkcji mysql FIND_IN_SET(),
http://dev.mysql.com/doc/refman/5.0/en/str...ion_find-in-set, w ten sposób sprawdzisz czy w dany ciągu znajduje się znak #
by_ikar
9.02.2012, 08:27:24
Warunki w wyrażeniach regularnych akurat zapisuje się inaczej. Tutaj raczej kombinowałbym coś z przewidywaniem pozytywnym. Lektura:
http://gajdaw.pl/php/wyrazenia-regularne-p...torial/p23.html