Ergebnis 1 bis 7 von 7

Thema: regex Hilfe

  1. #1
    100% 0-Ahnung Avatar von FLX
    Registriert
    Mar 2015
    Beiträge
    1,647
    Gefällt mir!
    949
    Du gefällst: 1,244

    regex Hilfe

    Moin, ich bräuchte mal eure Hilfe bzw. einen Denkanstoss.

    hab folgende HTML Daten vorliegen

    HTML-Code:
    <select id="ent_language" name="sea_language">
                <option value="1">Deutsch</option>
                <option value="2">Englisch</option>
                <option value="4">Chinesisch</option>
                <option value="5">Spanisch</option>
                <option value="6">Französisch</option>
                <option value="7">Türkisch</option>
                <option value="8">Japanisch</option>
                <option value="11">Italienisch</option>
                <option value="15">Deutsch / Englisch</option>
                <option value="16">Niederländisch</option>
                <option value="9">Arabisch</option>
                <option value="12">Kroatisch</option>
                <option value="13">Serbisch</option>
                <option value="14">Bosnisch</option>
                <option value="17">Koreanisch</option>
                <option value="24">Griechisch</option>
                <option value="25">Russisch</option>
                <option value="26">Indisch</option>
                </select>
    			<select id="sub_language" name="subs_language">
                <option value="11">Deutsch</option>
                <option value="21">Englisch</option>
                <option value="41">Chinesisch</option>
                <option value="51">Spanisch</option>
                <option value="61">Französisch</option>
                <option value="71">Türkisch</option>
                <option value="81">Japanisch</option>
                <option value="111">Italienisch</option>
                <option value="151">Deutsch / Englisch</option>
                <option value="161">Niederländisch</option>
                <option value="91">Arabisch</option>
                <option value="121">Kroatisch</option>
                <option value="131">Serbisch</option>
                <option value="141">Bosnisch</option>
                <option value="171">Koreanisch</option>
                <option value="241">Griechisch</option>
                <option value="251">Russisch</option>
                <option value="261">Indisch</option>
                </select>
    Daraus will ich nun ein Array mit der Sprache und zugehöriger ID haben.
    Ich benötige nir due Daten aus dem ersten Select. Das zweite soll ignoriert werden.
    Da ich mit Regex gern mal spinnefeind bin hab ich bisher nur folgendes erfolglos probiert

    PHP-Code:
    preg_match('!Sprache.*<option value="(.*)">(.*)</option>!isUm'$html$matches)
    preg_match_all("/<option value=\"(.*)\">(.*)<\/span>/is",$html,$matches); 
    Beides gibt mir nicht das gewünschte Ergebniss oder Daten mit denen man Arbeiten kann.

    Danke schonmal im vorraus
    You are offline
    Try:
    • Don't Panic
    • Look around
    • Interact with reality

  2. Werbung - Hier werben?
  3. #2
    Senior Avatar von Nimbus
    Registriert
    Oct 2015
    Beiträge
    561
    Gefällt mir!
    96
    Du gefällst: 573
    HTML mit RegEx parsen ist immer so eine Sache. Man sollte einen HTML-Parser (oder etwas vergleichbares) verwenden und nicht RegEx, sobald es über einfache Dinge hinausgeht.

    Ein einfach Ansatz wäre, dass du zuerst das erste Select per RegEx herausfilterst und das Ergebnis dann ganz normal erneut mit RegEx durchsuchst.

  4. #3
    Junior Avatar von 4nn8
    Registriert
    Apr 2018
    Beiträge
    63
    Gefällt mir!
    15
    Du gefällst: 89
    Das was Nimbus sagt +:
    PHP-Code:
    $start stripos($html'<select id="ent_language"');
    $end stripos($html'</select>'$start);
    preg_match_all('#<option value="(\d+)">([^<]+)</option>#i'substr($html$start$end $start), $matchesPREG_SET_ORDER);
    print_r($matches); 

  5. #4
    Junior Avatar von EVXN
    Registriert
    Aug 2017
    Beiträge
    90
    Gefällt mir!
    26
    Du gefällst: 94
    Geht sehr wohl und sogar relativ easy.

    PHP-Code:
    <?php
    $htmlInput 
    = <<<EOF
    <select id="ent_language" name="sea_language">
                <option value="1">Deutsch</option>
                <option value="2">Englisch</option>
                <option value="4">Chinesisch</option>
                <option value="5">Spanisch</option>
                <option value="6">Französisch</option>
                <option value="7">Türkisch</option>
                <option value="8">Japanisch</option>
                <option value="11">Italienisch</option>
                <option value="15">Deutsch / Englisch</option>
                <option value="16">Niederländisch</option>
                <option value="9">Arabisch</option>
                <option value="12">Kroatisch</option>
                <option value="13">Serbisch</option>
                <option value="14">Bosnisch</option>
                <option value="17">Koreanisch</option>
                <option value="24">Griechisch</option>
                <option value="25">Russisch</option>
                <option value="26">Indisch</option>
                </select>
                <select id="sub_language" name="subs_language">
                <option value="11">Deutsch</option>
                <option value="21">Englisch</option>
                <option value="41">Chinesisch</option>
                <option value="51">Spanisch</option>
                <option value="61">Französisch</option>
                <option value="71">Türkisch</option>
                <option value="81">Japanisch</option>
                <option value="111">Italienisch</option>
                <option value="151">Deutsch / Englisch</option>
                <option value="161">Niederländisch</option>
                <option value="91">Arabisch</option>
                <option value="121">Kroatisch</option>
                <option value="131">Serbisch</option>
                <option value="141">Bosnisch</option>
                <option value="171">Koreanisch</option>
                <option value="241">Griechisch</option>
                <option value="251">Russisch</option>
                <option value="261">Indisch</option>
                </select>
    EOF;

    $document = new DOMDocument();
    $document->loadHTML($htmlInput);
    $documentData $document->getElementsByTagName('option');

    $array = array();

    foreach (
    $documentData as $htmlRecord) {
           
    $array[$htmlRecord->getAttribute('value')] = $htmlRecord->nodeValue;
    }
    Ergebnis:

    Code:
    array(35) {
      [1]=>
      string(7) "Deutsch"
      [2]=>
      string(8) "Englisch"
      [4]=>
      string(10) "Chinesisch"
      [5]=>
      string(8) "Spanisch"
      [6]=>
      string(14) "Französisch"
      [7]=>
      string(11) "Türkisch"
      [8]=>
      string(9) "Japanisch"
      [11]=>
      string(7) "Deutsch"
      [15]=>
      string(18) "Deutsch / Englisch"
      [16]=>
      string(17) "Niederländisch"
      [9]=>
      string(8) "Arabisch"
      [12]=>
      string(9) "Kroatisch"
      [13]=>
      string(8) "Serbisch"
      [14]=>
      string(8) "Bosnisch"
      [17]=>
      string(10) "Koreanisch"
      [24]=>
      string(10) "Griechisch"
      [25]=>
      string(8) "Russisch"
      [26]=>
      string(7) "Indisch"
      [21]=>
      string(8) "Englisch"
      [41]=>
      string(10) "Chinesisch"
      [51]=>
      string(8) "Spanisch"
      [61]=>
      string(14) "Französisch"
      [71]=>
      string(11) "Türkisch"
      [81]=>
      string(9) "Japanisch"
      [111]=>
      string(11) "Italienisch"
      [151]=>
      string(18) "Deutsch / Englisch"
      [161]=>
      string(17) "Niederländisch"
      [91]=>
      string(8) "Arabisch"
      [121]=>
      string(9) "Kroatisch"
      [131]=>
      string(8) "Serbisch"
      [141]=>
      string(8) "Bosnisch"
      [171]=>
      string(10) "Koreanisch"
      [241]=>
      string(10) "Griechisch"
      [251]=>
      string(8) "Russisch"
      [261]=>
      string(7) "Indisch"
    }
    So ist die ID der Schlüssel und die Sprache der Wert des Schlüssels, um dies zu ändern musst du in der foreach-Schleife folgendes ändern:
    PHP-Code:
    $array[$htmlRecord->getAttribute('value')] = $htmlRecord->nodeValue
    zu

    PHP-Code:
    $array[$htmlRecord->nodeValue] = $htmlRecord->getAttribute('value'); 

  6. #5
    Senior Avatar von Nimbus
    Registriert
    Oct 2015
    Beiträge
    561
    Gefällt mir!
    96
    Du gefällst: 573
    Geht sehr wohl
    Wer hat denn etwas anderes behauptet?

    EDIT: EVXN dein Code liefert nicht das Ergebnis. Der zweite select-Tag soll ja eben ignoriert werden, auch wenn die Anpassung trivial sein dürfte.

  7. #6
    Junior Avatar von EVXN
    Registriert
    Aug 2017
    Beiträge
    90
    Gefällt mir!
    26
    Du gefällst: 94
    Auch kein Problem:

    PHP-Code:
    <?php 
    $htmlInput 
    '<select id="ent_language" name="sea_language"> 
                <option value="1">Deutsch</option> 
                <option value="2">Englisch</option> 
                <option value="4">Chinesisch</option> 
                <option value="5">Spanisch</option> 
                <option value="6">Französisch</option> 
                <option value="7">Türkisch</option> 
                <option value="8">Japanisch</option> 
                <option value="11">Italienisch</option> 
                <option value="15">Deutsch / Englisch</option> 
                <option value="16">Niederländisch</option> 
                <option value="9">Arabisch</option> 
                <option value="12">Kroatisch</option> 
                <option value="13">Serbisch</option> 
                <option value="14">Bosnisch</option> 
                <option value="17">Koreanisch</option> 
                <option value="24">Griechisch</option> 
                <option value="25">Russisch</option> 
                <option value="26">Indisch</option> 
                </select> 
                <select id="sub_language" name="subs_language"> 
                <option value="11">Deutsch</option> 
                <option value="21">Englisch</option> 
                <option value="41">Chinesisch</option> 
                <option value="51">Spanisch</option> 
                <option value="61">Französisch</option> 
                <option value="71">Türkisch</option> 
                <option value="81">Japanisch</option> 
                <option value="111">Italienisch</option> 
                <option value="151">Deutsch / Englisch</option> 
                <option value="161">Niederländisch</option> 
                <option value="91">Arabisch</option> 
                <option value="121">Kroatisch</option> 
                <option value="131">Serbisch</option> 
                <option value="141">Bosnisch</option> 
                <option value="171">Koreanisch</option> 
                <option value="241">Griechisch</option> 
                <option value="251">Russisch</option> 
                <option value="261">Indisch</option> 
                </select> 
    '


    $document = new DOMDocument(); 
    $document->loadHTML($htmlInput);
    $document $document->getElementById('ent_language');

    $documentData $document->getElementsByTagName('option'); 

    $array = array(); 

    foreach (
    $documentData as $htmlRecord) { 
           
    $array[$htmlRecord->getAttribute('value')] = $htmlRecord->nodeValue
    }

  8. #7
    100% 0-Ahnung
    THEMENSTARTER

    Avatar von FLX
    Registriert
    Mar 2015
    Beiträge
    1,647
    Gefällt mir!
    949
    Du gefällst: 1,244
    Mit dem DOMDocument hat es ziemlich gut funktioniert aber letztendlich hab ich mich für die rudimentäre Methode entschieden da mir die andere einige Warnings ausgeworfen hat welche ich nicht erst aufwendig entfernen wollte.

    Aktuelle Lösung ist somit diese hier

    PHP-Code:
    $start stripos($html'<select id="ent_language"');
    $end stripos($html'</select>'$start);

    if(
    preg_match_all('#<option value="(\d+)">([^<]+)</option>#isUm'substr($html$start$end $start), $matches))
    {
        return 
    array_combine($matches[2], $matches[1]));

    Ergebniss

    HTML-Code:
    Array
    (
        [Deutsch] => 1
        [Englisch] => 2
        [Chinesisch] => 4
        [Spanisch] => 5
        [Französisch] => 6
        [Türkisch] => 7
        [Japanisch] => 8
        [Italienisch] => 11
        [Deutsch / Englisch] => 15
        [Niederländisch] => 16
        [Arabisch] => 9
        [Kroatisch] => 12
        [Serbisch] => 13
        [Bosnisch] => 14
        [Koreanisch] => 17
        [Griechisch] => 24
        [Russisch] => 25
        [Indisch] => 26
    )
    Danke an die helfenden Hände hier im Thread und die Leute welche mir privat geschrieben haben <3
    You are offline
    Try:
    • Don't Panic
    • Look around
    • Interact with reality

  9. Diesen Mitgliedern gefällt dieser Beitrag:


Ähnliche Themen

  1. (PHP) - Regex Hilfe
    Von darkness im Forum Entwicklung / Programmierung
    Antworten: 4
    Letzter Beitrag: 19.01.2017, 08:42
  2. (JavaScript) - Javascript Regex
    Von darkness im Forum Entwicklung / Programmierung
    Antworten: 7
    Letzter Beitrag: 14.12.2016, 16:51
  3. (JavaScript) - Regex Groupname from Releasename
    Von fsxto im Forum Entwicklung / Programmierung
    Antworten: 11
    Letzter Beitrag: 05.10.2016, 11:01
  4. (PHP) - RegEx Hilfe Twig Templates nach Sprach Strings scannen
    Von darkness im Forum Entwicklung / Programmierung
    Antworten: 7
    Letzter Beitrag: 09.06.2015, 06:30
  5. (PHP) - via php Regex auch nur groß-schreibung erlauben
    Von schneewittchen im Forum Entwicklung / Programmierung
    Antworten: 0
    Letzter Beitrag: 29.05.2015, 22:16

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
SzeneBox.org... im Mittelpunkt der Szene!
© since 2015 szeneBOX.org - All Rights Reserved
Domains: www.szenebox.org