preg_match -> wo es nicht zutrifft
romy
- php
0 Sönke Tesch0 romy
0 werndt
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
$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
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
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