| 

.NET C# Java Javascript Exception

0
Moin Moin!

Ich habe eine kleines Problem mit preg_replace. Ich habe einen String, der ein Formular beinhaltet (jeweils von-bis Felder) und wie folgt aussieht (verkürzte Form!):

<input name="attr_v10" value="[filter_attr_v10]"> - <input name="attr_b10" value="[filter_attr_b10]"><br />
<input name="attr_v26" value="[filter_attr_v26]"> - <input name="attr_b26" value="[filter_attr_b26]"><br />
weitere Formularfelder


Über eine foreach-Schleife lasse ich die Value-Felder mit str_replace gegen den gespeicherten Wert austauschen. Habe ich z.B. den Bis-Wert von Attribut 26 noch nicht gespeichert, so bleibt "[filter_attr_b26]" in dem Value-Feld stehen.

Wie muss die Pattern von preg_replace (o.ä.) aussehen, damit ich alle Value-Werte mit Platzhaltern entferne: "[filter_attr_XXX]" ?

Vielen Dank und Grüße
25.07.2011
Reddi 1 2
Versteh ich Dich richtig, daß Du am Ende aus z.B. value="[filter_attr_v26]" ein value="" machen willst?
lunatigs 26.07.2011
4 Antworten
2
Der RegEx ist auch falsch gekappselt worden

$result = preg_replace('/[filter_attr_[v|b][0-9]+]/', '', $string);


Das Problem ist das dies hier in der Codeanzeige nicht zu sehen ist. Ich gehe mal davon aus, das der Kollege das auch korrekt escapt hatte aber der Codeblock dies wie bei mir geschluckt hat ... das erste /[filter ist korrekterweise ein /[filter und das letzte +]/ ist korrekterweise ein +]/ ... das Backslasch "escapet" das folgezeichen, was normalerweise im RegEx eine Funktion hat und daher ansonsten nicht in einem RegEx genutzt werden kann ... Bitte also nicht nur einfach Copy&Paste aus der Anzeige hier, sondern entsprechend noch anpassen. Liegt leider hier an der Anzeige das es falsch rüberkommt. Ich hab das RegEx übrigens noch einmal gekürzt, damit man nicht mit einem Array arbeiten muss ;) --- es wird trotzdem korrekt beides entfernt ...

$string ist dein Quellcode aus dem das geparst werden soll ... $result das Ergebnis.

edit mist ich sehe gerade das auch im kommentar das backslash geschluckt wurd ... ich hab es dir als Grafik hinterlegt ...
28.07.2011
EselDompteur 21 2
1
tatsache, ist mir gar nicht aufgefallen. habs bei mir mal geändert. den \\ kriegt man übrigens hin, wenn man ihn doppelt macht.
lunatigs 28.07.2011
1
Ich probier einfach mein Glück und hoffe, daß ich Deine Frage richtig verstanden hab.
<?php

$result = '<input name="attr_v10" value="[filter_attr_v10]"> - <input name="attr_b10" value="[filter_attr_b10]"><br />
<input name="attr_v26" value="[filter_attr_v26]"> - <input name="attr_b26" value="[filter_attr_b26]"><br />';

$array['pattern'][] = '/\[(filter_attr_v)[[:digit:]]*\]/i';
$array['replace'][] = '';
$array['pattern'][] = '/\[(filter_attr_b)[[:digit:]]*\]/i';
$array['replace'][] = '';

$result = preg_replace($array['pattern'], $array['replace'], $result);

echo $result;

?>

ergibt
<input name="attr_v10" value=""> - <input name="attr_b10" value=""><br />
<input name="attr_v26" value=""> - <input name="attr_b26" value=""><br />
26.07.2011
lunatigs 1,3k 2 8
lunatigs 1,3k 2 8
1
Mmmh, bei mir nicht. Aber schön das Dein Problem gelöst ist.
26.07.2011
lunatigs 1,3k 2 8
0
Moin Moin!

Ja, aber der RegEx klappt nicht 100%. Der erste Wert wird komplett entfernt und beim zweiten bleibt "[filter_attr_b" im Value stehen. Nich die feine Art, aber diesen Teil habe ich nun mit einem einfachen str_replace entfernt. ;)

Vielen Dank!
26.07.2011
Reddi 1 2

Stelle deine Php-Frage jetzt!