• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

von X bis Y kopieren/ löschen

dumbledore

Mitglied
Hallo,
mit PHP kann man laut dieser Seite bei z.b. einer Textdatei Wörter ersetzen entfernen etc.

Ich suche aber nach einer Möglichkeit alles außer z.b. Variable1 bis Variable2 zu löschen. Wie kann ich das machen?
Von mir auch anders herum. Also Variable1 bis Variable2 kopieren. Zwischen diesen Variablen würde sich eine Textkombination befinden.

In dem von mir gezeigtem Link ist die Rede von Positionen. Ich muss das aber machen, ohne auf Wortlängen, Positionen o.ä. zu achten.
 
Werbung:
Danke für den Tipp. Habe nun gegoogelt und das hier gefunden:

Im letzten Abschnitt kann man nach Wörtern suchen mit pattern.
Wenn ich jetzt von phone bis book alles kopieren möchte, dann muss ich beides als pattern definieren.
Ich konnte aber keine Kopier Funktion finden. Also ich finde dazu kein Befehl.

PHP:
<?php
$pattern = '/\book\w*/';
$pattern = '/\phone\w*/';

$text = 'prv/1/go/1/phone/yes/fexp/23842630%2C23860863/dover/11/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Chfr%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/ALgxI2wwRgIhANxSdbGpWF73rfihbGj1yL2v3UIVLPwJZ93e1X0uOCsfAiEAxTUyEOzdieScA6AC4RY55dO4PM225kFVWkhLDpwnblY%3D/file/index.m3u8"},"playerAds":[book{"pl';
echo preg_replace($pattern , $text);
?>
 
Werbung:
Erst einmal begrüße ich deine Eigeninitiative. Zu oft wird einfach nach der Lösung gefragt.

Statt preg_replace() solltest du preg_match benutzen. Es gibt dir ein Array aller Treffer zurück.

Was dein Pattern betrifft gibt es hier einen Fehler. Du definierst deine Variable $pattern 2 mal. Sprich:'/\book\w*/' wird von der anderen Deklarierung überschrieben.

Mehr Sinn macht es hier eine Variable mit einer Regex zu definieren. Deine jetzige RegEx macht für mich im Moment noch keinen Sinn.

Um mit RegEx zu experimentieren und zu lernen, empfehle ich diese Seite.
 
ich habe nun bezüglich preg_match gegoogelt. (https://lzone.de/examples/PHP preg_match)
Code:
<?php
$subject = "prv/1/go/1/phone/yes/fexp/23842630%2C23860863/dover/11/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Chfr%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/ALgxI2wwRgIhANxSdbGpWF73rfihbGj1yL2v3UIVLPwJZ93e1X0uOCsfAiEAxTUyEOzdieScA6AC4RY55dO4PM225kFVWkhLDpwnblY%3D/file/index.m3u8"},"playerAds":[book{"pl";
$pattern = '/phone/';
preg_match($pattern, $subject, $matches);

echo $matches[1]; // 1234
?>

mit diesem code sollte eigentlich der Text nach dem pattern phone durchsucht werden und der Rest müsste ausgegeben werden.

Als nächstes würde ich das gleiche mit dem Ergebnis machen und nach dem anderen pattern durchsuchen und dieses mal alles rückwärtsgesehen ausgeben lassen.
Dann hätte ich die Schnittmenge.

Aktuell kommt aber der Fehler Parse error: syntax error, unexpected '}'
 
Schau dir deine $subject Variable an. Besonders den hinteren Teil. Die Anführungszeichen müssen escaped werden. Oder du benutzt Hochkommas, sofern in deinem String keine vorkommen können.
 
Werbung:
Du meinst vermutlich die ganzen Anführungsstriche. Darauf habe ich leider keinen direkten Einfluss. Ich habe den Text jetzt beispielsweise reinkopiert.


Normalerweise soll da eine txt Datei importiert werden die auf meinem Server liegt. Kann man das, was du da sagst automatisiert machen beim Textimport?


Ich meine damit, dass ich manuell nichts machen darf/sollte.


Die Textdatei wird durch ein andere php Datei erstellt und auf dem Server abgelegt. In der Datei kommen viele doppelten und einfachen Anführungsstriche vor.
 
Das kann dir später beim Textimport egal sein. Im schlimmsten Fall musst du addslashes benutzen.

Solange du aber einen Beispieltext kopierst, anstatt es aus einem File zu importieren, musst du sie manuell escapen. Also vor jedes Anführungszeichen ein Backslash, wenn sie in deinem String sind.
 
ah ok danke für die Info. Werde es fürs erste mal manuell machen und später dann nachsehen wie ich das mit addslashes mache kann.

Ich habe es nun mit dem Code probiert.
Als Antwort bekomme ich eine weiße Seite.
Echo sollte den Wert doch ausgeben. Liegt es am [1] ?
Ich weiß nicht, wieso das im Beispielcode drin war.
Wenn ich es entferne, dann kommt statt einer weißen Seite der Text Array.


PHP:
<?php
$subject = "prv/1/go/1/phone/yes/fexp/23842630%2C23860863/dover/11/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Chfr%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/ALgxI2wwRgIhANxSdbGpWF73rfihbGj1yL2v3UIVLPwJZ93e1X0uOCsfAiEAxTUyEOzdieScA6AC4RY55dO4PM225kFVWkhLDpwnblY%3D/file/index.m3u8\"},\"playerAds\":[book{\"pl";

$pattern = '/phone/';
preg_match($pattern, $subject, $matches);

echo $matches[1];
?>
 
Werbung:
Es gibt ja nur ein match. Es ist also echo $matches[0].
Aber im Moment sucht deine RegEx einfach nur nach dem Wort "phone". Dementsprechend wird dein echo dann auch nur "phone" sein.
 
Ich dachte der code gibt alles aus ab phone. Das war mein Ziel. Dann habe ich wohl etwas falsch verstanden.

Ich habe nun folgendes gefunden.
PHP:
# Extract everything after the literal "START"
preg_match("/START(.*)/", $string, $results)

angewandt auf meinen Fall:

PHP:
<?php
$subject =
"prv/1/go/1/phone/yes/fexp/23842630%2C23860863/dover/11/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Chfr%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/ALgxI2wwRgIhANxSdbGpWF73rfihbGj1yL2v3UIVLPwJZ93e1X0uOCsfAiEAxTUyEOzdieScA6AC4RY55dO4PM225kFVWkhLDpwnblY%3D/file/index.m3u8\"},\"playerAds\":[book{\"pl";
preg_match("/phone(.*)/", $subject, $matches)
echo $matches[1];
?>

klappt aber auch nicht :(
 
Schau dir unbedingt an, wie man richtig debugged. Dann wäre dir aufgefallen, dass das Semikolon bei preg_match("/phone(.*)/", $subject, $matches) fehlt und du immer noch echo $matches[1];, anstatt echo $matches[0]; benutzt.

PHP:
$subject = "prv/1/go/1/phone/yes/fexp/23842630%2C23860863/dover/11/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Chfr%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/ALgxI2wwRgIhANxSdbGpWF73rfihbGj1yL2v3UIVLPwJZ93e1X0uOCsfAiEAxTUyEOzdieScA6AC4RY55dO4PM225kFVWkhLDpwnblY%3D/file/index.m3u8\"},\"playerAds\":[book{\"pl";

preg_match("/phone(.*)/", $subject, $matches);
  
echo $matches[0];

Aber das ist ja immer noch nicht der reguläre Ausdruck, den du suchst.
 
Werbung:
Super es hat jetzt geklappt. Habe das Suchpattern noch geändert.
So sieht es nun aus:
PHP:
<?php
$subject = "prv/1/go/1/phone/yes/fexp/23842630%2C23860863/dover/11/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Chfr%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/ALgxI2wwRgIhANxSdbGpWF73rfihbGj1yL2v3UIVLPwJZ93e1X0uOCsfAiEAxTUyEOzdieScA6AC4RY55dO4PM225kFVWkhLDpwnblY%3D/file/index.m3u8\"},\"playerAds\":[book{\"pl";
$suchpattern="@phone(.*)book@";
preg_match($suchpattern, $subject, $matches);
echo $matches[0];
?>

Vielen Dank nochmal.
Aktuell keine weiteren Fragen passt alles super.
 
Zuletzt bearbeitet:
Zurück
Oben