Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dopieszczenie wyrażenia regularnego
Forum PHP.pl > Forum > PHP
markonix
Mamy takie różne numery zgłoszeń, które mają dużo formatów w zależności od firmy i chciałbym mój regex ulepszyć aby nie łapał za dużo.
Mam 100% pewność, że te numery mimo różnego formatu zawierają jakieś cyfry, na pewno ich będzie więcej niż kilka.
Ktoś pomoże dodać ten warunek?

Tutaj to co mam teraz wraz z przykładami co powinno łapać, a co nie:
https://regex101.com/r/IzEGsc/1

Mógłbym sprawdzić matches w drugiej pętli ale to by było słabe.
by_ikar
https://regex101.com/r/IzEGsc/2
markonix
Próbowałem z tym "Positive Lookahead" bo często w Google na to trafiałem ale nie potrafiłem tego zastosować.

Jednak z Twoim regex jest coś nie tak jak dodałem parę błędnych numerów oraz chciałbym dodać aby to było minimum kilka cyrf. Chyba \D łapie białe znaki?
https://regex101.com/r/lnoaih/1

Tu coś próbowałem ale znowu nie łapie mi tych ze slashami:
https://regex101.com/r/osflta/1
by_ikar
Już wcześniej wydawało mi się że będziesz miał szerszy zakres. Widzisz, problem tutaj polega na tym że próbujesz wyłapać rzeczy które mogą wystąpić w różnej kolejności, dlatego łapie więcej niż powinien.

Nie da się tego jakoś idealnie ugrać jednym uniwersalnym regexem, najlepiej jakbyś zrobił kilka wyrażeń, gdzie każde będzie łapać specyficzne "formaty", bo zapewne te formaty mają jakiś schemat i każdy taki schemat musisz sobie wypisać i użyć LUB żeby użyć wielu takich wyrażeń. Wówczas łatwiej ci będzie wyłuskiwać tylko to co chcesz.

Cytat
Chyba \D łapie białe znaki?


tak, to jest uproszczony odpowiednik [^0-9], możesz zrobić coś takiego: [\w\/-] tylko wówczas może to być zbyt bardzo zachłanne. Tutaj poprawione dla przykładów które podesłałeś: https://regex101.com/r/lnoaih/2

nie mniej, próbuj to ugrać poprzez wyrażenie per format, wówczas łatwiej ci będzie połączyć kilka takich wyrażeń w jedno, lub skrócić wyrażenie, bo będziesz miał "szerszy obraz".
markonix
Mam ten luksus, że w bazie już mam troszkę takich różnych umów więc potrafię właśnie określić zakresów znaków specjalnych i to ile mają minimalne cyfr nie licząc liter (które w ogóle mogą nie wystąpić).
Nie planuje dopisywać osobnych regexów dla różnych firm bo te się zmieniają tu często oraz same mogą zmienić numeracje, a system musi być samowystarczalny bez programisty.

Chciałbym w jednym bo to nie musi być jakieś bezbłędne, to ma wyłapać 90% przypadków (numer w tytule e-maila).
Potem i tak te numery weryfikuje z tymi w DB i ograniczenie tych wyników ma służyć tylko zmniejszeniu liczby zapytań.

Twoja druga wersja jak widać daje radę więc dzięki.
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.