eGospodarka.pl
bezpłatny program PIT 2019

eGospodarka.plGrupypl.comp.programming › Pomoc z wyrażeniem regularnym
Ilość wypowiedzi w tym wątku: 7

  • 1. Data: 2020-03-23 14:42:46
    Temat: Pomoc z wyrażeniem regularnym
    Od: Roman Tyczka <n...@b...no>

    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/f...@2...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. f...@2...png, czyli w rezultacie chcę dostać:

    images/f...@2...png

    Stosuję takiego reexpa:

    <img.*?src="(.*?facebook@2x\.png)".*?>

    i dupa... dostaję bzdury.

    Jak to zrobić poprawnie? Co robię źle?

    --
    pozdrawiam
    Roman Tyczka


  • 2. Data: 2020-03-23 16:22:28
    Temat: Re: Pomoc z wyrażeniem regularnym
    Od: Łukasz 'Maly' Ostrowski <l...@g...com>

    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. f...@2...png, czyli w rezultacie chcę dostać:
    >
    > images/f...@2...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.


  • 3. Data: 2020-03-23 17:41:48
    Temat: Re: Pomoc z wyrażeniem regularnym
    Od: Roman Tyczka <n...@b...no>

    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/bqmqO0PG
    7kaGj6soOCzI4QFA4pZdumev5QGmqwSOBtvlQIzalTIifoIB8DfS
    qjjN.png

    W Twoim wyrażeniu jest po prawej stronie przełącznik /gm - co on robi?

    --
    pozdrawiam
    Roman Tyczka


  • 4. Data: 2020-03-23 18:02:54
    Temat: Re: Pomoc z wyrażeniem regularnym
    Od: Roman Tyczka <n...@b...no>

    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. f...@2...png, czyli w rezultacie chcę dostać:
    >>
    >> images/f...@2...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


  • 5. Data: 2020-03-23 18:22:29
    Temat: Re: Pomoc z wyrażeniem regularnym
    Od: Roman Tyczka <n...@b...no>

    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


  • 6. Data: 2020-03-23 21:59:14
    Temat: Re: Pomoc z wyrażeniem regularnym
    Od: Łukasz 'Maly' Ostrowski <l...@g...com>

    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.


  • 7. Data: 2020-03-23 22:31:08
    Temat: Re: Pomoc z wyrażeniem regularnym
    Od: "M.M." <m...@g...com>

    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/f...@2...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. f...@2...png, czyli w rezultacie chcę dostać:
    >
    > images/f...@2...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

strony : [ 1 ]



Szukaj w grupach

bezpłatny program PIT 2019

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: