romy: preg_match -> wo es nicht zutrifft

Hallöchen liebe Leute,

ich versuche gerade aus einem String einen bestimmten Teil herauszuziehen

der String sieht beispielsweise so aus:
$str = "<input type="button" value="x"><input type="text"value="blabla">

haben möchte ich "blabla"

mach ich jetzt ein:
preg_match('/value=(.*)/i',$string,$txt);

wie kann ioch ihm dann sagen, dass wenn anstatt (.*) ein x steht, er diese value nicht finden soll?
Oder geht diese Sache etwas eleganter zu lösen?

vielen Dank
ciao
romy

  1. $str = "<input type="button" value="x"><input type="text"value="blabla">

    haben möchte ich "blabla"

    mach ich jetzt ein:
    preg_match('/value=(.*)/i',$string,$txt);

    Das wird wahrscheinlich nix. Du solltest schon genau auf den Inhalt der Anführungszeichen einschränken, also statt 'value=(.*)' besser 'value="([^"]*)"', andernfalls bekommst Du den kompletten Rest der Zeile auch noch aufgedrückt.

    wie kann ioch ihm dann sagen, dass wenn anstatt (.*) ein x steht, er diese value nicht finden soll?

    Wenn ich mich recht entsinne, gibt es bedingte Ausdrücke, schau mal auf der entsprechenden Seite der PHP-Anleitung unter "Assertions" und "Conditional Subpatterns". Mir persönlich wäre das zu kompliziert, so daß ich lieber alles von preg_match() annehmen und erst anschließend aussortieren würde.

    Gruß,
      soenk.e

    1. Hi,

      Das wird wahrscheinlich nix. Du solltest schon genau auf den Inhalt der Anführungszeichen einschränken, also statt 'value=(.*)' besser 'value="([^"]*)"', andernfalls bekommst Du den kompletten Rest der Zeile auch noch aufgedrückt.

      stimmt, ist mir beim probieren schon aufgefallen, so geht es besser
      danke

      Wenn ich mich recht entsinne, gibt es bedingte Ausdrücke, schau mal auf der entsprechenden Seite der PHP-Anleitung unter "Assertions" und "Conditional Subpatterns".

      so nennt man das also, werde mal nachlesen

      Mir persönlich wäre das zu kompliziert, so daß ich lieber alles von preg_match() annehmen und erst anschließend aussortieren würde.

      mhm, sehr wahrscheinlich,
      ist wohl die Beste Idee

      vielen Dank für die Anregungen

      ciao
      romy

  2. Guten Abend romy,

    wie kann ioch ihm dann sagen, dass wenn anstatt (.*) ein x steht, er diese value nicht finden soll?

    Du könntest zB. sagen:

    <?
    $str = " value="blub"  ectpp
             value="x"     usw
             value="ex"    hallali
             value="xox"   hullahup
             value="hexe"  habedieehre
             value="ochse" hebediehaare
             value="exe"   verehrteeusebia
           ";

    preg_match_all('/value="([^"x]*|[^"]{2,})"/', $str, $txt);

    print '<pre>';
    print_r( $txt[1] );
    print '</pre>';
    ?>

    Das matcht jetzt alles - auch den leeren string "" und das grosse X -, nur eben das kleine x, wenn's alleine vorkommt, nicht.

    gruß

    werndt