Wyrażenie regularne- błąd składni wzorca

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
5w155
Piegowaty Guziec
Piegowaty Guziec
Posty: 26
Rejestracja: 11 sty 2009, 13:12
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86_64

Wyrażenie regularne- błąd składni wzorca

Post autor: 5w155 »

Witam,
Potrzebuję napisać wyrażenie regularne, które "wyciągnie" z tego tekstu:

Kod: Zaznacz cały

<div id="small-list-foto" class="maxSzerokosc">
                      <a rel="zdjecie:0" href="/ogloszenie/zdjecie/1932088_1.html">
              <img alt="" src="http://d.ale.gratka.pl/g2/o/16/7d/a9/1932088_1_f100_m.jpeg">
            </a>
                      <a rel="zdjecie:1" href="/ogloszenie/zdjecie/1932088_2.html">
              <img alt="" src="http://d.ale.gratka.pl/g2/o/16/7d/a9/1932088_2_fad5_m.jpeg">
            </a>
                      <a rel="zdjecie:2" href="/ogloszenie/zdjecie/1932088_3.html">
              <img alt="" src="http://d.ale.gratka.pl/g2/o/16/7d/a9/1932088_3_5b0d_m.jpeg">
            </a>
                      <a rel="zdjecie:3" href="/ogloszenie/zdjecie/1932088_4.html">
              <img alt="" src="http://d.ale.gratka.pl/g2/o/16/7d/a9/1932088_4_c859_m.jpeg">
            </a>
</div>
wszystkie ciągi znaków z sekcji "href".
Pytanie dodatkowe: czemu TO nie działa? :
/<div.*?id="small-list-foto".*?>.*?href="(.*?).html".*?>.*?<\/div>/i
Awatar użytkownika
borzole
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 127
Rejestracja: 10 sie 2010, 11:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Wyrażenie regularne- błąd składni wzorca

Post autor: borzole »

Nie napisałeś w jakim języku chcesz to wyciągnąć. W którym języku stawia się /i na końcu ? :)
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: Wyrażenie regularne- błąd składni wzorca

Post autor: beluosus »

Twój wzór jest bezsensu, bo po pierwsze regex zazwyczaj czyta po jednej linii tekstu, po drugie jakbyś chciał traktować wszystkie linie jako jedną (/m) to mógłbyś wyłuskać z niej tylko jeden link.

Kod: Zaznacz cały

#!/usr/bin/perl

use strict;

my $in = 0;

while (<>)
{
    if ($in)
    {
        last if (/<\/div>/i);
        print $1 . "\n" if (/.*?href="(.*?).html".*?>.*?/i);
    }
    $in = 1 if (/<div.*?id="small-list-foto".*?>/i);
}
Output:

Kod: Zaznacz cały

/ogloszenie/zdjecie/1932088_1
/ogloszenie/zdjecie/1932088_2
/ogloszenie/zdjecie/1932088_3
/ogloszenie/zdjecie/1932088_4
borzole pisze:W którym języku stawia się /i na końcu ? :)
Powiedz lepiej w którym się nie stawia.
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
dam
Sędziwy Jeż
Sędziwy Jeż
Posty: 40
Rejestracja: 21 maja 2008, 20:43
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: Wyrażenie regularne- błąd składni wzorca

Post autor: dam »

borzole pisze:W którym języku stawia się /i na końcu ? :)
Modyfikator /i "wyłącza" rozróżnianie wielkości znaków.

W PHP można zrobić tak:

Kod: Zaznacz cały

<?php
$html = '<div id="small-list-foto" class="maxSzerokosc">
                      <a rel="zdjecie:0" href="/ogloszenie/zdjecie/1932088_1.html">
              <img alt="" src="http://d.ale.gratka.pl/g2/o/16/7d/a9/1932088_1_f100_m.jpeg">
            </a>
                      <a rel="zdjecie:1" href="/ogloszenie/zdjecie/1932088_2.html">
              <img alt="" src="http://d.ale.gratka.pl/g2/o/16/7d/a9/1932088_2_fad5_m.jpeg">
            </a>
                      <a rel="zdjecie:2" href="/ogloszenie/zdjecie/1932088_3.html">
              <img alt="" src="http://d.ale.gratka.pl/g2/o/16/7d/a9/1932088_3_5b0d_m.jpeg">
            </a>
                      <a rel="zdjecie:3" href="/ogloszenie/zdjecie/1932088_4.html">
              <img alt="" src="http://d.ale.gratka.pl/g2/o/16/7d/a9/1932088_4_c859_m.jpeg">
            </a>
</div>';

preg_match_all('/<a.*?rel="zdjecie:\d".*?href="(.+)\.html".*?>/i', $html, $array);

print_r($array[1]);
?>
Co zwróci

Kod: Zaznacz cały

Array
(
    [0] => /ogloszenie/zdjecie/1932088_1
    [1] => /ogloszenie/zdjecie/1932088_2
    [2] => /ogloszenie/zdjecie/1932088_3
    [3] => /ogloszenie/zdjecie/1932088_4
)
Awatar użytkownika
borzole
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 127
Rejestracja: 10 sie 2010, 11:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Wyrażenie regularne- błąd składni wzorca

Post autor: borzole »

@beluosus
np. w sed lub python. Widzę, że w Perl/Ruby jest, których nie znam wcale.
Awatar użytkownika
5w155
Piegowaty Guziec
Piegowaty Guziec
Posty: 26
Rejestracja: 11 sty 2009, 13:12
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: Wyrażenie regularne- błąd składni wzorca

Post autor: 5w155 »

Chodziło mi o PHP i całkowicie mnie usatysfakcjonowaliście :) Dzięki!
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 22 gości