Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.programming > #33814 > unrolled thread

Pomoc z wyrażeniem regularnym

Started byRoman Tyczka <noemail@because.no>
First post2020-03-23 14:42 +0100
Last post2020-03-23 14:31 -0700
Articles 7 — 3 participants

Back to article view | Back to pl.comp.programming


Contents

  Pomoc z wyrażeniem regularnym Roman Tyczka <noemail@because.no> - 2020-03-23 14:42 +0100
    Re: Pomoc z wyrażeniem regularnym Łukasz 'Maly' Ostrowski <l3vi4than@gmail.com> - 2020-03-23 16:22 +0100
      Re: Pomoc z wyrażeniem regularnym Roman Tyczka <noemail@because.no> - 2020-03-23 17:41 +0100
      Re: Pomoc z wyrażeniem regularnym Roman Tyczka <noemail@because.no> - 2020-03-23 18:02 +0100
        Re: Pomoc z wyrażeniem regularnym Roman Tyczka <noemail@because.no> - 2020-03-23 18:22 +0100
          Re: Pomoc z wyrażeniem regularnym Łukasz 'Maly' Ostrowski <l3vi4than@gmail.com> - 2020-03-23 21:59 +0100
    Re: Pomoc z wyrażeniem regularnym "M.M." <mmarszik@gmail.com> - 2020-03-23 14:31 -0700

#33814 — Pomoc z wyrażeniem regularnym

FromRoman Tyczka <noemail@because.no>
Date2020-03-23 14:42 +0100
SubjectPomoc z wyrażeniem regularnym
Message-ID<7eb1xqggsveo.dlg@tyczka.com>
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

[toc] | [next] | [standalone]


#33815

FromŁukasz 'Maly' Ostrowski <l3vi4than@gmail.com>
Date2020-03-23 16:22 +0100
Message-ID<1obbn2nqlvfdo.o2874irnxy4f$.dlg@40tude.net>
In reply to#33814
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.

[toc] | [prev] | [next] | [standalone]


#33816

FromRoman Tyczka <noemail@because.no>
Date2020-03-23 17:41 +0100
Message-ID<1i6qlhlxhv8ve.dlg@tyczka.com>
In reply to#33815
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

[toc] | [prev] | [next] | [standalone]


#33817

FromRoman Tyczka <noemail@because.no>
Date2020-03-23 18:02 +0100
Message-ID<1v1fmusubprxc.dlg@tyczka.com>
In reply to#33815
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

[toc] | [prev] | [next] | [standalone]


#33818

FromRoman Tyczka <noemail@because.no>
Date2020-03-23 18:22 +0100
Message-ID<1q04k2vdu3ifv$.dlg@tyczka.com>
In reply to#33817
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

[toc] | [prev] | [next] | [standalone]


#33819

FromŁukasz 'Maly' Ostrowski <l3vi4than@gmail.com>
Date2020-03-23 21:59 +0100
Message-ID<pdvhdvb46akr.bqj19150lkej.dlg@40tude.net>
In reply to#33818
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.

[toc] | [prev] | [next] | [standalone]


#33820

From"M.M." <mmarszik@gmail.com>
Date2020-03-23 14:31 -0700
Message-ID<82991a7a-b8c8-4003-887b-f87319fcdab7@googlegroups.com>
In reply to#33814
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

[toc] | [prev] | [standalone]


Back to top | Article view | pl.comp.programming


csiph-web