Ankündigung

Einklappen
Keine Ankündigung bisher.

Regexp Quantifizierer Rückgabe

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Regexp Quantifizierer Rückgabe

    Hi,

    ich habe die folgenden beiden Strings

    PHP-Code:
        $sub1 = <<<SUB
        <DIV class="Produktdetails">
            <H2>Testproduktname
                <SPAN><I>Lieferzeit 1 bis 5 Tage</I></SPAN>
            </H2>
        </DIV>
    SUB;

        
    $sub2 = <<<SUB
        <DIV class="Produktdetails">
            <H2 class="testklasse">Testproduktname
            </H2>
        </DIV>
    SUB; 
    auf diese wende ich eine Regexp an und lasse mir die Ergebnisse ausgeben

    PHP-Code:
        $pat "`.*<DIV.*>.*<H2.*>(.*).*(Lieferzeit){0,1}.*</H2>.*</DIV>.*`siU";
        
        
    preg_match_all$pat$sub1$mat1 );
        
    preg_match_all$pat$sub2$mat2 );
        
        unset( 
    $mat1] );
        unset( 
    $mat2] );
        
        echo 
    '<pre>'htmlspecialcharsprint_r$mat1) ), '</pre>';
        echo 
    '<pre>'htmlspecialcharsprint_r$mat2) ), '</pre>'
    Jetzt habe ich folgendes Problem beim auslesen der Lieferzeit, wenn denn vorhanden. Lasse ich fest auf die Lieferzeit prüfen, also muss sie angegeben sein

    PHP-Code:
    $pat "`.*<DIV.*>.*<H2.*>(.*)(<SPAN><I>Lieferzeit 1 bis 5 Tage</I></SPAN>).*</H2>.*</DIV>.*`siU"
    bekomme ich auch das entsprechende Ergebnis

    Code:
    Array
    (
        [1] => Array
            (
                [0] => Testproduktname
            	
            )
    
        [2] => Array
            (
                [0] => <SPAN><I>Lieferzeit 1 bis 5 Tage</I></SPAN>
            )
    
    )
    Array
    (
        [1] => Array
            (
            )
    
        [2] => Array
            (
            )
    
    )
    Pattern wird in String 1 gefunden, in 2 nicht - OK.

    Will ich die Angabe der Lieferzeit jetzt optional haben

    PHP-Code:
    $pat "`.*<DIV.*>.*<H2.*>(.*)(<SPAN><I>Lieferzeit 1 bis 5 Tage</I></SPAN>){0,1}.*</H2>.*</DIV>.*`siU"
    bekomme ich garkein Ergebnis mehr geliefert

    PHP-Code:
    Array
    (
        [
    1] => Array
            (
                [
    0] => 
            )

        [
    2] => Array
            (
                [
    0] => 
            )

    )
    Array
    (
        [
    1] => Array
            (
                [
    0] => 
            )

        [
    2] => Array
            (
                [
    0] => 
            )


    lasse ich nach der Lieferzeit folgende Zeichen weg

    PHP-Code:
    $pat "`.*<DIV.*>.*<H2.*>(.*)(<SPAN><I>Lieferzeit 1 bis 5 Tage</I></SPAN>){0,1}</H2>.*</DIV>.*`siU"
    findet er immerhin noch den Namen und ggf. die Lieferzeit

    PHP-Code:
    Array
    (
        [
    1] => Array
            (
                [
    0] => Testproduktname
                
    <SPAN><I>Lieferzeit 1 bis 5 Tage</I></SPAN>
            
            )

        [
    2] => Array
            (
                [
    0] => 
            )

    )
    Array
    (
        [
    1] => Array
            (
                [
    0] => Testproduktname
            
            
    )

        [
    2] => Array
            (
                [
    0] => 
            )


    aber nicht als separates Ergebnis. Kann mir jemand verraten, wie ich es hinbekomme, die Lieferzeit optional und als eigenständiges Suchergebnis finden zu lassen?

    Gruss, Christian.

  • #2
    Vermutlich ist das letzte .* gieriger als {0,1} und schluckt die Lieferzeit mit. Versuchs dort mal mit .*?

    [edit]

    Sehe gerade das U-Flag. Dann versuch mal {0,1}?

    Kommentar


    • #3
      Hi, danke für die Rückmeldung. Hatte auch schon die Notation in geschweiften Klammern probiert, hatte in meinen Tests aber nichts gebracht. Schliesslich klappt es jetzt so

      Code:
      `<DIV.*>.*<H2.*>(.*)(<.*<I>(.*)</I>.*)?</H2>.*</DIV>`siU

      Kommentar

      Lädt...
      X