#programowanie #regexp próbuję zdebuggować moją ekspresję którą konstruuję ( #cpp #qt ) w ten sposób:

"\{ARGS" + QString("(?:[(\d+),(\w+)?\])?").repeated(64) + "\}"
czyli odpowiadającą np. napisowi takiemu jak ten:

{ARGS[2,1][10,D][2,255][10,wykop]}

z tym, że ciąg wyrazów może być dłuższy (maksymalnie 64 pary). Działało dobrze póki miałem 16 par, a teraz przy 64 dostaję brak zgodności i na http://regex101.com dostaję "catastrophic backtracking" opisane tutaj: https://www.regular-expressions.info/catastrophic.html - nie umiem
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@s_theCapt: poszedłbym w coś takiego (?>[([0-9]+)\,([0-9,a-z,A-Z]+)\]) i dał do tego if(x.startsWith("{ARGS") && x.endsWith("}")). W ten sposób łapie to o co chodzi i jest eszcze szybkie. Możnaby sprawdzać w 1 regexpie ale masz dodatkowe grupy i wydajność szlag trafi.
EDIT zobacz sobie w regex101, różnica jest subtelna ale powinieneś być w stanie iterować w przeciwieństwie do twojego regexa.
  • Odpowiedz
#regexp #mojaprzygodazregex #python #til

Taki tam dzienniczek tego co dzisiaj sie nauczylem. Moze bedzie regularnie.

(?)(.*?)(?=<\/tag_name>) - wyszukaj wszystkie wartosci w tagu tag_name
lookahead, lookbehind dziala tylko z Perl-Style extention regex , flaga -P przy uzywaniu grep. Co mnie zdziwilo ze Sublime Text tez to obsluguje.
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Jak pociąć zdanie po każdym białym znaku za wyjątkiem niełamliwej spacji? (nie jest ona zapisana jako encja, tylko normalnie, jako znak UTF-8).
Idzie jakoś za jednym preg_split? Czy trzeba najpierw tę niełamliwą spację na coś podmienić, pociąć zdanie po \s i z powrotem podmiana tego czegoś na twardą spację w tym elemencie tablicy, w którym występuje?
#php #regexp #regex
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Hej,
Poszukuję wyrażenia regularnego, którego celem będzie znalezienie w kodzie wywołania funkcji pushback na samym sobie np.

r_et.push_back(r_et[i]);
prosty regex push_back\([^\n]+[ nie jest zbyt optymalny, bo wykrywa 583 rekordy, z których może 10 będzie przydatnych.

#programowanie #regex #regexp
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

B->A pushback A

a takie wyrażenie nie należy do gramatyki regularnej tylko do bezkontekstowej.


@Nicolas_Bourbaki: to jest gramtatyka kontekstowa (mocniejsza niż bezkontekstowa). Bezkontekstowa to np. B -> A pushback reverse(A), gdzie reverse odwraca ciąg znaków
  • Odpowiedz
Jest takie powiedzenie: jeśli masz problem i chcesz go rozwiązać przy pomocy wyrażeń regularnych, to masz już dwa problemy...

Ale nie taki diabeł straszny. Chciałbym polecić wszystkim (znającym i chcącym poznać) wyrażenia regularne (regex) wspaniałe narzędzie, a jest nim regex debugger: https://regex101.com

W jednym miejscu macie świetne narzędzie do pisania i testowania wyrażeń regularnych. Do tego jest świetny quick reference do regexa. Jest również moduł quiz, gdzie możemy poćwiczyć sobie zadania.

I
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@lajdak: wystarczy wkleić i zobaczyć ilość kroków które pokazuje ( ͡° ͜ʖ ͡°) nawet podlinkowany przez Ciebie artykuł ma screeny z regex101
  • Odpowiedz
@Hauleth: Chcę wyciągać zawartości tych specyfikacji jak CPU: RAM: itd. Całość znajduje się w polu w którym jest dużo innych informacji więc trzeba przeszukiwanie ograniczyć do znaczników -- SPECS_CONTENT --
  • Odpowiedz
#regexp #sed #awk #programowanie
Poproszę o pomoc z windowsowym (gnuwin32) awk/gawk/sed lub alternatywą pod windowsem.

Pliki z danymi wejściowymi mają format (przykładowy wiersz)
yzz-0000001000-v1000,"54,76","54,76",0,"54,76","54,76"
Chcę otrzymać
  • 2
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

  • 0
Interesujące, ale racji obostrzeń (i drobnego wpływu wina które skonsumowalem ;)) sugeruję rozbicie po prostu na trzy przejscia, w pierwszym łap "\d+,\d+," jako grupę i zamieniaj drugi przecinek na srednik, w drugim [a-Z-0-9]*, by tez pierwszy srednik zalatwic w trzecim wiadomo, wywalic cudzyslowie. W tym stanie niestety to najlepsza podpowiedz jaka moga zaoferowac :)
@uhu8
  • Odpowiedz
W js używam takiego regexp: /^[\p{Lu}][\p{Ll}]*$/u, który przepuszcza tylko 1 wyraz z wielkiej litery, dla wszystkich możliwych znaków. Wszystko działa na Operze i Chrome, jednak Firefox nie obsługuje tego \p{}.

Jest jakiś prosty sposób na ominięcie tego? A może po prostu cierpliwie poczekać aż Firefox zacznie to obsługiwać?

#programowanie #webdev #javascript #js #regexp
  • 19
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Wiesiek1: Mac Graff i o kant rzyci Twoja walidacja. Nie waliduj tak, bo się jeszcze przejedziesz (np. ja mam znajomego, którego pierwsze imię to "Piotr Jacek", tak, dwa imiona są pierwszym imieniem).
  • Odpowiedz
@Wiesiek1: jak ja nie lubię takich wadliwych walidacji, a potem nie możesz użyć emaila typu janusz+spam@costam.com bo ktoś nie pomyślał że to może być prawidłowy adres ( ͡° ʖ̯ ͡°)
  • Odpowiedz
Mirki, napisałem następujące wyrażenie regularne:

(https|http):\/\/(www\.)?(\b(?!mail\b)\w+.)google\.(com|([a-z]{2})).*
Ogólnie chcę, aby uwzględniało mi wszystkie podstrony, tj.
aaa.google.com
bbb.google.com
  • 20
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Atexor: bo ten regex przepuszcza jesli po "mail" jest \w+ czyli cokolwiek oprocz google. Jesli tego brak to wtedy string nie jest walid. Chcialem wlasnie czegos takiego uzyc, ale piwnicowalem inne rzeczy. Grunt ze sie udalo Ci znalezc, nawet z pomoca google ;)
  • Odpowiedz
@Rabzx: Bałem się, że to ja jestem z-----y ( ͡° ͜ʖ ͡°) Tak jak zasadę działania jeszcze pamiętam, tak składnie od razu zapominam ( ͡° ͜ʖ ͡°)
  • Odpowiedz
Czesc,
podsuniecie mi pomysl w jaki sposob moge uzyskac zamierzony efekt?

Dla uproszczonego testu mam sobie plik text.txt

START_LINE
  • 11
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@OperatorHydrolokator: hmm to zdefiniuje zakres od START_LINE do ostatniej pustej.
W pliku sa transakcje, w roznych sekcjach znajduja sie puste linie, wiec to nie moze byc punkt odniesienia.

Jesli wiec transakcja ma swoj specyficzny poczatek to potrzebuje ja cala wylapac. Na samym dole (5 i 6) znajduje sie linia adresowa, gdzie w zaleznosci od miejsca moze byc inna :)

W skrocie - gdy zaczyna sie od STARTLINE, chce wylapac wszystko do 6. 6
  • Odpowiedz
Mircy i Mirabelki spod #programowanie #regexp - jakim wyrażeniem "odescapować" String, w którym jako escape char jest \ ?
Przy czym nie chodzi o usunięcie wszystkich tych ukośników, bo w tekście mogą wystąpić \ i z tego powinien zostać \.
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Czy takie wyrazenie regularne:
^19|20\d{2}$
zablokuje mozliwosc wpisu innej daty rocznej niz zaczynajacej sie na 1900 lub 2000 (np. 1998 lub 2016)?

Jaki bylby najprostszy zapis sprawdzajacy czy miesiac w formacie angielskim (np Sep, Jan lub Dec) zostaly wpisane poprawnie? Czy jest co prostszego niz:
^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)$
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach