Werte aus Text filtern

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

  • Werte aus Text filtern

    da ich in Reg-Ex nicht so mächtig bin, bräucht ich bitte hilfe.

    ich habe einen Text:
    Vorname:
    Susanne

    Name/Firma:

    Name/Firma 2:
    Mustermann Mustergmbh
    --textende--

    nun muss ich aus diesem Text den vornamen und den firmennamen herausfiltern
    mein ansatz sieht so aus :
    PHP-Code:
    $fields=array('Vorname:','Name\/Firma 2:');
    foreach(
    $fields as $field){
           
    // das Suchmuster mit Delimiter und Modifer (falls vorhanden)
           
    $pattern '/(?<='.$field.'\s).*?[.*\s{3,}]/s';
           
    // RegEx mit preg_match_all() auswerten
           
    preg_match_all($pattern$string,$array);
           
    print_r($array);
        } 
    so und als ergebniss erhalte ich :
    PHP-Code:
    Array
    (
        [
    0] => Array
            (
                [
    0] => Susanne
            
    )

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


    bei dem zweiten Feld erhalte ich nur das Mustermann und das 2te wort geht schon verloren.

    ich möchte also die anfangsbedingung festlegen und das ende soll wenn mindestens 3 leerzeichen sind oder ein zeilenumbruch das ende des strings sein(aber so weit bin ich nicht gekommen).
    Es liegt nie am Gerät, sondern immer an dem der es bedient.

  • #2
    Wenn du Slashes in deinem Muster hast, musst du einen andern Delimiter wählen. Nimm den s-Modifyer und den Ungreedy-Operator raus:
    Code:
    #(?<=$field\s).*[.*\s{3}]#
    Gruss
    H2O

    Kommentar


    • #3
      ausgabe
      PHP-Code:
      Array
      (
          [
      0] => Array
              (
                  [
      0] => Susanne
      Name
      /Firma:

      Name/Firma 2:
      Mustermann Mustergmbh
        
              
      )

      )
      Array
      (
          [
      0] => Array
              (
                  [
      0] => Mustermann Mustergmbh
       
              
      )


      danke aber jetzt nimmt er mir sämtlichen text nach SUCHAUSDRUCK auch noch mit kann man nicht sagen :
      ende bei entweder 3 leerzeichen oder einem zeilenumbruch ?
      Es liegt nie am Gerät, sondern immer an dem der es bedient.

      Kommentar


      • #4
        ende bei entweder 3 leerzeichen oder einem zeilenumbruch ?
        .* matched per Default nur bis ans Ende einer Zeile. Willst du mit .* über mehrere Zeilen matchen dann brauchst du einen zusätzlichen Schalter (s)
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          Neuer Versuch
          PHP-Code:
          $fields = array('Vorname:''Name/Firma 2:');
          $string file_get_contents('bsp.txt');
          foreach(
          $fields as $field){
              
          $pattern "#(?<=$field\\s)(.*)(\\s{3}|$)#mU";
              
          preg_match_all($pattern$string$array);
              echo 
          "<pre>";
              
          var_dump($array);
              echo 
          "</pre>";

          Gruss
          H2O

          Kommentar


          • #6
            danke funzt einwandfrei
            Es liegt nie am Gerät, sondern immer an dem der es bedient.

            Kommentar

            Lädt...
            X