Mam listę około 120 tysięcy angielskich słów (w zasadzie każde słowo w języku).Wyrażenie regularne Wildcard Matching
Potrzebuję wyrażeń regularnych, które umożliwiałyby przeszukiwanie tych słów za pomocą znaków wieloznacznych, a.k.a. *
i ?
.
Kilka przykładów:
- jeśli użytkownik wyszukuje
m?st*
, to pasuje na przykładmaster
lubmister
lubmistery
. - jeśli użytkownik wyszukuje
*ind
(Każde słowo kończące sięind
), to pasujewind
lubbind
lubblind
lubgrind
.
Teraz większość użytkowników (szczególnie tych, którzy nie są zaznajomieni z wyrażeń regularnych) wie, że ?
zastępuje dokładnie jeden znak, a *
jest zamiennikiem 0, 1 lub więcej znaków. Absolutnie chcę na tej podstawie zbudować funkcję wyszukiwania.
Moje pytania brzmią: Jak przekonwertować typ użytkownika (na przykład m?st*
) na wyrażenie regularne?
Przeszukałem internet (oczywiście włączając tę stronę) i wszystko, co mogłem znaleźć, to tutoriale, które próbowały mnie nauczyć zbyt wiele lub pytania, które były nieco podobne, ale niewystarczające, aby dostarczyć odpowiedzi na mój własny problem.
Wszystko, co mogłem wymyślić, to to, że muszę wymienić ?
na .
. Tak więc m?st*
staje się m.st*
. Jednak nie mam pojęcia, co zastąpić *
z.
Każda pomoc zostanie bardzo doceniona. Dziękuję Ci.
PS: Jestem całkowicie nowy w wyrażeniach regularnych. Wiem, jak potężni mogą być, ale wiem też, że mogą być bardzo trudne do nauczenia. Więc nigdy nie poświęcałem czasu na to ...
możliwy duplikat [Czy istnieje odpowiednik java.util.regex dla wzorców typu "glob"?] (Http://stackoverflow.com/questions/1247772/is-there-an-equivalent-of-java- util-regex-for-glob-type-patterns) – NPE
Pamiętaj, że każda * inna * wyrażenie regularne, które może pojawić się w twoim zapytaniu, również musi zostać zmienione. Jeśli ktoś wpisze '^ \ w..', prawdopodobnie nie chcesz przekazać tego do swojego silnika wyrażeń regularnych w jego surowej postaci – Gareth
@Gareth Dziękuję, zapamiętam to. –