Thread View: pl.comp.programming
7 messages
7 total messages
Started by Roman Tyczka
Mon, 23 Mar 2020 13:42
Pomoc z wyrażeniem regularnym
Author: Roman Tyczka
Date: Mon, 23 Mar 2020 13:42
Date: Mon, 23 Mar 2020 13:42
45 lines
2114 bytes
2114 bytes
Witam, Mam np. taki kodzik w htmlu: <tbody><img src="dubaj.png"> <audio src="plik.png"> <tr align="center" style="vertical-align: top; display: inline-block; text-align: center;" valign="top"> <td style="word-break: break-word; vertical-align: top; padding-bottom: 5px; padding-right: 3px; padding-left: 3px;" valign="top"><img type="" src="chusta.png"> <a href="https://www.facebook.com/" target="_blank"> <img alt="Facebook" height="32" src="images/facebook@2x.png" style="text-decoration: none; -ms-interpolation-mode: bicubic; height: auto; border: none; display: block;" title="Facebook" width="32"/></a> </td> I teraz, żeby wydobyć wszystkie nazwy plików z tagów <img> używam wyrażenia: <img.*?src="(.*?)".*?> i mam 3 matche i 3 nazwy plików. To jest ok. Ale teraz chciałbym wyciągnąć pełną nazwę konkretnego pliku (wraz ze ścieżką względna) np. facebook@2x.png, czyli w rezultacie chcę dostać: images/facebook@2x.png Stosuję takiego reexpa: <img.*?src="(.*?facebook@2x\.png)".*?> i dupa... dostaję bzdury. Jak to zrobić poprawnie? Co robię źle? -- pozdrawiam Roman Tyczka
Re: Pomoc z wyrażeniem regularnym
Author: Łukasz 'Maly' Ostrowski
Date: Mon, 23 Mar 2020 15:22
Date: Mon, 23 Mar 2020 15:22
30 lines
1731 bytes
1731 bytes
On Mon, 23 Mar 2020 14:42:46 +0100, Roman Tyczka wrote: > <ciach> > Ale teraz chciałbym wyciągnąć pełną nazwę konkretnego pliku (wraz ze > ścieżką względna) np. facebook@2x.png, czyli w rezultacie chcę dostać: > > images/facebook@2x.png > > Stosuję takiego reexpa: > > <img.*?src="(.*?facebook@2x\.png)".*?> > > i dupa... dostaję bzdury. Jakie bzdury? To pomoże w diagnozie ;-). p.s. Pierwszy wildcard zrobiłbym .+?, albo nawet \s.*? - bo tam powinien być jakiś whitespace po img ;-). > Jak to zrobić poprawnie? Co robię źle? Na moje oko wygląda okay. Podejrzewam, że jest informacja której nie podałeś. Zwróć uwagę też na tryby multi/single-line, tagi XHTML mogą być "złamane". Evidence: https://imgur.com/a/cNryhCy Najlepiej wrzuć przykładowe inputy i regexy na pastebin albo coś podobnego, łatwiej o diagnozę jeżeli gramy w grę z pełną informacją ;-). -- Pozdrawiam, Łukasz 'Mały' Ostrowski.
Re: Pomoc z wyrażeniem regularnym
Author: Roman Tyczka
Date: Mon, 23 Mar 2020 16:41
Date: Mon, 23 Mar 2020 16:41
29 lines
2016 bytes
2016 bytes
On Mon, 23 Mar 2020 16:22:28 +0100, Łukasz 'Maly' Ostrowski wrote: >> <img.*?src="(.*?facebook@2x\.png)".*?> >> >> i dupa... dostaję bzdury. > > Jakie bzdury? To pomoże w diagnozie ;-). p.s. Pierwszy wildcard zrobiłbym > .+?, albo nawet \s.*? - bo tam powinien być jakiś whitespace po img ;-). > >> Jak to zrobić poprawnie? Co robię źle? > > Na moje oko wygląda okay. Podejrzewam, że jest informacja której nie > podałeś. Zwróć uwagę też na tryby multi/single-line, tagi XHTML mogą być > "złamane". > > Evidence: https://imgur.com/a/cNryhCy > > Najlepiej wrzuć przykładowe inputy i regexy na pastebin albo coś podobnego, > łatwiej o diagnozę jeżeli gramy w grę z pełną informacją ;-). Ok, zrzut z RegexBuddy: http://snap.ashampoo.com/uploads/2020-03-23/bqmqO0PG7kaGj6soOCzI4QFA4pZdumev5QGmqwSOBtvlQIzalTIifoIB8DfSqjjN.png W Twoim wyrażeniu jest po prawej stronie przełącznik /gm - co on robi? -- pozdrawiam Roman Tyczka
Re: Pomoc z wyrażeniem regularnym
Author: Roman Tyczka
Date: Mon, 23 Mar 2020 17:02
Date: Mon, 23 Mar 2020 17:02
38 lines
2388 bytes
2388 bytes
On Mon, 23 Mar 2020 16:22:28 +0100, Łukasz 'Maly' Ostrowski wrote: > On Mon, 23 Mar 2020 14:42:46 +0100, Roman Tyczka wrote: >> <ciach> >> Ale teraz chciałbym wyciągnąć pełną nazwę konkretnego pliku (wraz ze >> ścieżką względna) np. facebook@2x.png, czyli w rezultacie chcę dostać: >> >> images/facebook@2x.png >> >> Stosuję takiego reexpa: >> >> <img.*?src="(.*?facebook@2x\.png)".*?> >> >> i dupa... dostaję bzdury. > > Jakie bzdury? To pomoże w diagnozie ;-). p.s. Pierwszy wildcard zrobiłbym > .+?, albo nawet \s.*? - bo tam powinien być jakiś whitespace po img ;-). > >> Jak to zrobić poprawnie? Co robię źle? > > Na moje oko wygląda okay. Podejrzewam, że jest informacja której nie > podałeś. Zwróć uwagę też na tryby multi/single-line, tagi XHTML mogą być > "złamane". > > Evidence: https://imgur.com/a/cNryhCy > > Najlepiej wrzuć przykładowe inputy i regexy na pastebin albo coś podobnego, > łatwiej o diagnozę jeżeli gramy w grę z pełną informacją ;-). Teraz też zobaczyłem, że zmodyfikowałeś tekst wejściowy i zrobiłeś całego taga <img> w jednym wierszu, mimo, że był w moim przykładzie "poenterowany". Gdy przedzielisz linię w Twoim przykładzie, w dowolnym miejscu po atrybucie src, ale przezd końcowym > to Twój przykład też przestanie działać. -- pozdrawiam Roman Tyczka
Re: Pomoc z wyrażeniem regularnym
Author: Roman Tyczka
Date: Mon, 23 Mar 2020 17:22
Date: Mon, 23 Mar 2020 17:22
32 lines
2323 bytes
2323 bytes
On Mon, 23 Mar 2020 18:02:54 +0100, Roman Tyczka wrote: >> Na moje oko wygląda okay. Podejrzewam, że jest informacja której nie >> podałeś. Zwróć uwagę też na tryby multi/single-line, tagi XHTML mogą być >> "złamane". >> >> Evidence: https://imgur.com/a/cNryhCy >> >> Najlepiej wrzuć przykładowe inputy i regexy na pastebin albo coś podobnego, >> łatwiej o diagnozę jeżeli gramy w grę z pełną informacją ;-). > > Teraz też zobaczyłem, że zmodyfikowałeś tekst wejściowy i zrobiłeś całego > taga <img> w jednym wierszu, mimo, że był w moim przykładzie > "poenterowany". Gdy przedzielisz linię w Twoim przykładzie, w dowolnym > miejscu po atrybucie src, ale przezd końcowym > to Twój przykład też > przestanie działać. No i to doprowadziło mnie do mety. Po pierwsze trzeba włączyć opcje "dot match line breaks", żeby traktował cały blok jako jedną linię. Oraz opcję ungreedy - choć tego zupełnie nie rozumiem, bo przecież po to dawałem pytajniki, żeby kwantyfikatory nie były zachłanne. Niemniej po użyciu (?U) zaczęło działać. Kto umie wyjaśnić co zmienia dodanie (?U) proszony jest o zabranie głosu. Ostateczny wzorzec: (?s)(?U)<img.+?src="(.*?facebook@2x\.png)".*?> -- pozdrawiam Roman Tyczka
Re: Pomoc z wyrażeniem regularnym
Author: Łukasz 'Maly' Ostrowski
Date: Mon, 23 Mar 2020 20:59
Date: Mon, 23 Mar 2020 20:59
15 lines
1289 bytes
1289 bytes
On Mon, 23 Mar 2020 18:22:29 +0100, Roman Tyczka wrote: > <snip> > Ostateczny wzorzec: > > (?s)(?U)<img.+?src="(.*?facebook@2x\.png)".*?> IMO już samo ? powinno wystarczyć, może używasz jakiegoś dziwnego enginu RE. Widziałeś moje przykłady z regex101 - było okay. I dlatego wspominałem też o single-line/multiline, bo to właśnie jest ". matches new line". -- Pozdrawiam, Łukasz 'Mały' Ostrowski.
Re: Pomoc z wyrażeniem regularnym
Author: M.M.
Date: Mon, 23 Mar 2020 21:31
Date: Mon, 23 Mar 2020 21:31
52 lines
2845 bytes
2845 bytes
On Monday, March 23, 2020 at 2:42:48 PM UTC+1, Roman Tyczka wrote: > Witam, > > Mam np. taki kodzik w htmlu: > > <tbody><img src="dubaj.png"> > > <audio src="plik.png"> > > <tr align="center" style="vertical-align: top; display: inline-block; > text-align: center;" valign="top"> > > <td style="word-break: break-word; vertical-align: top; padding-bottom: > 5px; padding-right: 3px; padding-left: 3px;" > valign="top"><img type="" src="chusta.png"> > > <a href="https://www.facebook.com/" target="_blank"> > > <img alt="Facebook" height="32" src="images/facebook@2x.png" > style="text-decoration: none; -ms-interpolation-mode: bicubic; height: > auto; border: none; display: block;" title="Facebook" width="32"/></a> > </td> > > I teraz, żeby wydobyć wszystkie nazwy plików z tagów <img> używam > wyrażenia: > > <img.*?src="(.*?)".*?> > > i mam 3 matche i 3 nazwy plików. To jest ok. > > Ale teraz chciałbym wyciągnąć pełną nazwę konkretnego pliku (wraz ze > ścieżką względna) np. facebook@2x.png, czyli w rezultacie chcę dostać: > > images/facebook@2x.png > > Stosuję takiego reexpa: > > <img.*?src="(.*?facebook@2x\.png)".*?> > > i dupa... dostaję bzdury. > > Jak to zrobić poprawnie? Co robię źle? Bez kompilacji, bez testowania: Może tak, najpierw takim dla ścieżek w pojedynczych: <img[^>]+src\s*=\s*'([^']*)'[^>]*> Potem takim, gdy ścieżki są w podwójnych: <img[^>]+src\s*=\s*"([^"]*)"[^>]*> Pozdrawiam
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads