Regex ma zawierać 5000 nazw, które łącznie dają 83k znaków? Czyli średnio mamy 16,6 znaku na nazwę?
Ja bym to oparł o PHP, bo tak byłoby mi najszybciej Robisz tablię z tymi wszystkimi nazwami, potem czytasz linia po linii z pliku i sprawdzisz in_array czy jest element, jak jest, to go zapisujesz do innego tablicy albo drukujesz na ekran, co tam byś chciał.
No i co ważne, tablię z 5000 nazwami łatwo zbudować, o ile masz je w każdej linijce osobno, zamiana tekstu z wykorzystaniem regexa, szukasz: ^ i zamieniasz na " potem szukasz $ i zamieniasz na ", i masz wszystkie elementy tablicy. Później możesz usunąć entery i to też za pomocą regexa lub prostszego \r\n
drobok - wyrażenia regularne są OK, pod warunkiem, że są “optymalizowanie”. Z tymi gwiazdkami to jest w porządku, sam mi zaproponował autor pewnego programu
Robiłem mnóstwo testów…
Próbowałem kilku regex były dobre, ale nie były zbyt optymalne na 60-90 tysięcy “String”(ciągów) co powodowało duże użycie pamięci RAM - powyżej 10GB…teraz nie wzrasta…
Jężyk C# ?
Akurat program napisany prawdopodobnie w .NET
Oprogramowanie bardzo szybkie - znajdzie każdy plik w ciągu kilku sekund nawet na 36 TB danych i kilkadziesiąt milionów plików więc się przydaje to szukania plików, zapisywania ścieżek,
Jest szybszy w szukaniu plików może z tysiąc razy od Windows Search, Total Commander i inne
Cóż, autor trochę zdziwione, że szukam tylu nazw i nawet nie wziął tego wcześniej pod uwagę… ale ja testuję …on ulepsza
Regex a(b|c|d) nie różni się w czasie wykonania niczym od ab|ac|ad, więc nie wiem gdzie ta optymalizacja. Oba są sprowadzone do takiego samego automatu skończonego.
Problemem dużego użycia pamięci nie są dane wejściowe tylko wykorzystanie regexów do czegoś, do czego się one nie nadają. Dla twojego ostatniego regexa zostanie wyprodukowanych 36 stanów. Jeśli w twoim regexie dominuje konkatenacja i jest on długi to zawsze będzie słabo działać.
Pokaż mi oprogramowanie np. Edytor tekstu do którego można wprowadzić Regex np. string o długości 90000 … a nawet jeśli tak to czy uda Ci się parsować…
a)mój przyjaciel zwiększył limit string-u w swoim oprogramowaniu(pisanym w języku .NET) jaki można wprowadzić… więc działa… wprowadził kilka poprawek, ulepszen itd.
Jak już wspomniałem w #5 poście ZREZYGNOWAŁEM z ReGex - zastąpiłem je tylko zwykłymi gwiazdkami , które odseparowują poszukiwane nazwy… więc wykorzystanie pamięci jest niskie - do kilku GB
Ja wprowadzając tekst o długości powiedzmy 90000 znaków - wykorzystanie procesora jest najwyższe, ale można je zredukować do pojedynczych rdzeni… im więcej mocy - tym szybciej zadanie zostanie wykonane…
Tu masz rację… To już słyszałem od fachowca od oprogramowania i programowania w Java.
Chciałem przefiltrować nazwy, wprowadzając Regex, który był zły pod względem wydajnościowym dla tego oprogramowania… więc polecił mi zoptymalizować Regex, im krotszy tym lepiej Tak myślę
Jeśli znasz “The Best” RegEx - to napisz, który wg Ciebie ten najlepszy wydajnościowo