Zeichenfolge durch NULL / nichts ersetzen und somit löschen (preg_replace)?

Blaafer

Grünschnabel
Hallo.

Der Inhalt einer Variable sieht so aus (123)
Code:
111111111111111111111
111111111111111111111
111111111111111111111
110011110000111000011
100011100110010011001
010011100110011111001
110011111110011000011
110011111000111111001
110011110011111111001
110011100111110011001
000000100000011000011
111111111111111111111
111111111111111111111


Nun möchte ich gerne, dass dies hier entfernt wird (2)
Code:
1111111
1111111
1111111
1000011
0011001
0011001
1111001
1100011
1001111
0011111
0000001
1111111
1111111


Also, dass er so aussieht (13)
Code:
11111111111111
11111111111111
11111111111111
11001111000011
10001110011001
01001111111001
11001111000011
11001111111001
11001111111001
11001110011001
00000011000011
11111111111111
11111111111111


Hierzu dient mir die (unschöne, da sie von mir stammt) RegExp
Code:
/(.*)1111111(.*)\r\n(.*)1111111(.*)\r\n(.*)1111111(.*)\r\n(.*)1000011(.*)\r\n(.*)0011001(.*)\r\n(.*)0011001(.*)\r\n(.*)1111001(.*)\r\n(.*)1100011(.*)\r\n(.*)1001111(.*)\r\n(.*)0011111(.*)\r\n(.*)0000001(.*)\r\n(.*)1111111(.*)\r\n(.*)1111111(.*)\r\n(.*)1111111(.*)\r\n(.*)1111111(.*)\r\n(.*)/Uis


Mit preg_match wird erkannt, dass sich dieses Suchmuster (2) in der obersten Zeichenfolge (123) befindet.
Mir gelingt es jedoch nicht, es (2) mittels preg_replace durch nichts zu ersetzen (es (2) also zu löschen, sodass die unterste Zeichenfolge entsteht (13)).

Es wäre sehr nett von euch, wenn ihr mir helfen würdet, denn mit preg* und den regulären Ausdrücken bin ich nicht wirklich dicke, wie ihr sehen könnt.

Danke schon einmal.
 
Hi

Du könntest es doch durch '' ersetzen, eine leere Zeichenkette. Löschen denke ich wirst du sie nicht können, dafür müsstest du die komplette Zeile in ein array lesen, und die betroffenen Werte nicht wieder ausgeben.
 
Zuletzt bearbeitet:
Ich würd’s wie folgt machen:
PHP:
$haystack = <<<STRING
111111111111111111111
111111111111111111111
111111111111111111111
110011110000111000011
100011100110010011001
010011100110011111001
110011111110011000011
110011111000111111001
110011110011111111001
110011100111110011001
000000100000011000011
111111111111111111111
111111111111111111111
STRING;
$haystackLines = preg_split('/[\r\n]+/', $haystack);
$needle = <<<STRING
1111111
1111111
1111111
1000011
0011001
0011001
1111001
1100011
1001111
0011111
0000001
1111111
1111111
STRING;
$needleLines = preg_split('/[\r\n]+/', $needle);
$charDims = array(7, 13);
$chars = strlen($haystackLines[0]) / $charDims[0];
$found = false;
for ($i=0; $i<$chars; $i++) {
	for ($j=0; $j<$charDims[1]; $j++) {
		if (substr($haystackLines[$j], $i*$charDims[0], $charDims[0]) != $needleLines[$j]) {
			continue 2;
		}
	}
	$found = $i;
	break;
}
if ($found !== false) {
	echo 'Gefunden '.$found;
} else {
	echo 'Nicht gefunden';
}
Damit bekommst du die Position des gesuchten Zeichens. Das Löschen dieses Zeichens sollte dann kein Problem mehr sein.
 
Zurück