Ankündigung

Einklappen
Keine Ankündigung bisher.

Regex <span></span>

Einklappen

Neue Werbung 2019

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

  • Regex <span></span>

    Hallo,
    ich war schon früher mit regex überfordert und bin es noch bis heute... es möchte nicht in meinen Kopf wie Regex funktioniert, hoffe ihr könnt mir weiterhelfen.
    Ich möchte einen Preis auslesen zwischen zwei <span>

    Versuche es ungelogen seit heute morgen... und ich bekommen es einfach nicht hin...

    HTML-Code:
    <span id="priceblock_ourprice" class="a-size-medium a-color-price">EUR 11,99</span>
    Ich möchte nur folgendes ausgegeben haben EUR 11,99

    wäre nett wenn mir jemand mit dem richtigen pattern aushelfen könnte und evtl. erklären, dass ich es auch einmal raffe!

    Vielen Dank

  • #2
    Zitat von LordMustang Beitrag anzeigen
    ich war schon früher mit regex überfordert und bin es noch bis heute...
    Dann nimm halt was anderes

    PHP-Code:
    $string '<span id="priceblock_ourprice" class="a-size-medium a-color-price">EUR 11,99</span>';

    echo 
    stristr(stristr($string'</span>'true), "EUR ");
    // EUR 11,99 
    Siehe http://php.net/manual/en/function.stristr.php

    Kommentar


    • #3
      Regex eignet sich nicht nur Verarbeitung von HTML. Nimm besser einen HTML-Parser wie z.B. DOMDocument und XPath.

      Kommentar


      • #4
        Zitat von hellbringer Beitrag anzeigen
        Regex eignet sich nicht nur Verarbeitung von HTML. Nimm besser einen HTML-Parser wie z.B. DOMDocument und XPath.
        ok Danke werde mich mal in DOMDocument und Xpath einlesen

        Kommentar


        • #5
          XPath ist nicht viel leichter als RegExp.
          PHP-Code:
          preg_replace'/^.*?\>(EUR\s+\d+\,\d+)\<.*$/''$1''<span id="priceblock_ourprice" class="a-size-medium a-color-price">EUR 11,99</span>' ); 
          Signaturrrrrrr

          Kommentar


          • #6
            Geht auch ohne XPath:

            PHP-Code:
            <?php
            $dom 
            = new DOMDocument();
            $dom->loadHTML('<span id="priceblock_ourprice" class="a-size-medium a-color-price">EUR 11,99</span>');
            $data $dom->getElementById("priceblock_ourprice");
            echo 
            $data->nodeValue;
            sorry, shift-taste kaputt

            Kommentar


            • #7
              Zitat von K313 Beitrag anzeigen
              XPath ist nicht viel leichter als RegExp.
              PHP-Code:
              preg_replace'/^.*?\>(EUR\s+\d+\,\d+)\<.*$/''$1''<span id="priceblock_ourprice" class="a-size-medium a-color-price">EUR 11,99</span>' ); 
              Wenn es um HTML geht schon. Regex ist so, als würde man ein Blatt Papier ein paarmal falten, damit man damit eine Schraube rausdrehen kann. XPath ist so, als würde man dafür einen Schraubenzieher nehmen.

              Dein Beispiel bietet so viele Möglichkeiten, dass es fehl schlägt. Wenn man Programmcode schreibt, sollte man ein Augenmerk dafür haben, dass er auch generell stabil läuft und nicht nur für genau ein spezielles Beispiel funktioniert.

              Kommentar


              • #8
                Zitat von hellbringer Beitrag anzeigen
                ..., als würde man ein Blatt Papier ein paarmal falten, damit man damit eine Schraube rausdrehen kann. ...
                Neee,ne,ne,ne,ne,ne,ne! Ich schreibe doch kein Framework oder so was, also die Lösung muss nicht vielfältig sein werden, um bei verschiedenen Umstände anzupassen... Für eine konkrete Aufgabe - eine konkrete aber schnelle Lösung. Werden sich die Umstände ändern - werden auch neue Lösungen gesucht. Aber bis her, wen der Code das Problem löst, alles anderes ist Arbeit umsonst.

                Signaturrrrrrr

                Kommentar


                • #9
                  Zitat von K313 Beitrag anzeigen
                  Neee,ne,ne,ne,ne,ne,ne! Ich schreibe doch kein Framework oder so was, also die Lösung muss nicht vielfältig sein werden, um bei verschiedenen Umstände anzupassen... Für eine konkrete Aufgabe - eine konkrete aber schnelle Lösung. Werden sich die Umstände ändern - werden auch neue Lösungen gesucht. Aber bis her, wen der Code das Problem löst, alles anderes ist Arbeit umsonst.
                  Vielleicht für dich schnell, weil du nur ein Werkzeug kennst/beherrscht. Aber es ist trotzdem das falsche Werkzeug.

                  Quick'n'dirty mag zwar für eine temporäre Lösung ausreichend sein. Aber nicht für die Dauer. Und nicht als Empfehlung für hilfesuchende Programmierer, die dann erst das falsche lernen.

                  Kommentar


                  • #10
                    Ich gehe mal davon aus, daß
                    HTML-Code:
                    <span id="priceblock_ourprice" class="a-size-medium a-color-price">EUR 11,99</span>
                    nicht dauerhaft der gesamte zu untersuchende HTML Code ist.
                    Bei mehr Body wird eine Regex sehr unangenehm und das Ändern wird zur Qual.

                    Kommentar


                    • #11
                      Das ist das, was er gezeigt hat und davon ist auszugehen. Kann ja sein dass er sich diese Zeile, nehmen wir an es ist die 42., aus einem Array rausgefischt hat, aber auch das ist nur Spekulation und hilft hier nicht weiter.

                      Für eine Zeile einen Parser einzusetzen wäre dann auch zu viel des Guten, für eine komplette Seite aber durchaus angebracht, aber dazu müsste sich der TE mal äussern und alles klar darstellen, evtl. will er ja nur REGEX erlernen, dann liegen wir hier alle falsch und er, der TE, hat nur ein schlechtes Beispiel gebracht..

                      Kommentar


                      • #12
                        Zitat von protestix Beitrag anzeigen
                        Das ist das, was er gezeigt hat und davon ist auszugehen. Kann ja sein dass er sich diese Zeile, nehmen wir an es ist die 42., aus einem Array rausgefischt hat, aber auch das ist nur Spekulation und hilft hier nicht weiter.

                        Für eine Zeile einen Parser einzusetzen wäre dann auch zu viel des Guten, für eine komplette Seite aber durchaus angebracht, aber dazu müsste sich der TE mal äussern und alles klar darstellen, evtl. will er ja nur REGEX erlernen, dann liegen wir hier alle falsch und er, der TE, hat nur ein schlechtes Beispiel gebracht..
                        puhh nun wurde doch viel hier geschrieben... in erster Linie tut es mir leid falls ich es falsch erklärt bzw. ein schlechtes Beispiel euch gezeigt habe.

                        Der Preis ändert sich natürlich, habe aber mit dem Vorschlag von Meister1900 mein Problem gelöst. Ich würde trotzdem sehr gerne Regex endlich verstehen, evtl. würde sich einer bereit erklären mir das zu erklären? Hier im Thread oder evtl über Skype / Discord? Ich wäre ihm auf jedenfall sehr dankbar!

                        Ich möchte noch ein Lob aussprechen an alle ... hätte nicht gedacht so viele Antworten in so kurze Zeit zu bekommen.

                        Kommentar


                        • #13
                          Zitat von LordMustang Beitrag anzeigen
                          Ich würde trotzdem sehr gerne Regex endlich verstehen, evtl. würde sich einer bereit erklären mir das zu erklären?
                          RegEx ist sehr komplex und nicht mal so mit wenigen Sätzen erklärt. Dafür gibt es seitenlange Tuturials. Bei der Nutzung unterlaufen selbst erfahrenen Leuten schnell mal Fehler.
                          Der Vorschlag aus #5
                          PHP-Code:
                          preg_replace'/^.*?\>(EUR\s+\d+\,\d+)\<.*$/''$1''<span id="priceblock_ourprice" class="a-size-medium a-color-price">EUR 11,99</span>' ); 
                          zeigt welche Probleme man mit solchen Regex-Lösungen bekommen kann, wenn diese nicht für alle möglichen Varianten ausgetestet werden.
                          Obiger Ausdruck liefert auch für ein ''<b>EUR 12,5</b>' ein Resultat von EUR 12,5. Wenn der innere Ausdruck nicht zutrifft, und dafür reicht ein Leerzeichen nach dem Preis, wird nichts ersetzt und immer der gesamte String zurückgeliefert.
                          Für eine Suche ist wenn es schon mit RegEx sein muss ein preg_match besser geeignet. Der Ausdruck aus #5 müsste dafür noch verfeinert werden und auch noch die id mit verarbeiten.
                          All diese Probleme bestehen bei den Vorschlag #6 nicht. Die Lösung mit XPATH ist auch gegenüber einer RegEx-Lösung vergleichsweise einfach:
                          PHP-Code:
                          echo (new DOMXPath($dom))
                            ->
                          query('//span[@id="priceblock_ourprice"]')
                            ->
                          item(0)
                            ->
                          nodeValue

                          Kommentar


                          • #14
                            Zitat von LordMustang Beitrag anzeigen
                            Ich würde trotzdem sehr gerne Regex endlich verstehen, evtl. würde sich einer bereit erklären mir das zu erklären?
                            Was verstehst du denn nicht? Vielleicht kann man das im Detail klären.
                            Zu Regulären Ausdrücken gibt es sehr viele praktische Tutorials, ich glaube https://www.regular-expressions.info/tutorial.html ist beispielsweise nicht schlecht. Ein richtiges Verständnis wird beschränkt sich mMn nicht nur auf die Anwendung, sondern auch die Theorie dahinter (z.B. wo die Grenzen liegen, welche andere Sprachen es gibt (RegEx ist eigentlich nur eine Notationsform für Reguläre Grammatiken), Stichwort "Chomsky-Hierarchie", uvm) und auch da kann man beliebig weit in die Tiefe gehen.

                            Kommentar


                            • #15
                              Ich fand https://danielfett.de/de/tutorials/t...are-ausdrucke/ sehr hilfreich um mir ein Grundverständnis anzueignen.
                              Idealerweise hat man anschließend noch ein paar Szenarien zum Üben parat (Nein, kein HTML parsen aber Eingaben im Input validieren z.B.).

                              BTW: Der Klassiker
                              [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                              [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                              Kommentar

                              Lädt...
                              X