PHP Element finden und bestimmte zeichen ersetzen

hemorieder

Lieutenant
Registriert
März 2003
Beiträge
649
Hey,

ich habe in einer Variabel einen langen Quelltext, darin soll ein bestimmter Teil gefunden werden.

Dieser Teil ist recht leicht zu identifizieren, denn dieser startet ab:

Code:
https=2//

und geht bis

Code:
=1jpg

Das was dazwischen ist will ich in einer neuen Variabel.
In der dieser neuen Variabel soll nun etwas ersetzt werde, nämlich jedes

Code:
=1
durch einen
Code:
.

und jedes

Code:
=
durch einen
Code:
/
.

Ich weiß, dass das str-replace kann, aber ich beherrsche leider überhaupt keine regulären Ausdrücke.
Außerdem sehe ich das Problem, dass bei beiden "suchen" es um ein "=" geht.

Könnt ihr mir da helfen ? Das wäre ganz toll.

lg
 
hemorieder schrieb:
Könnt ihr mir da helfen ?
Mit dem/mehreren kompletten String/s wäre dir sicherlich schnell geholfen.

edit: Vielleicht reicht das auch bereits:
Code:
$pattern = <<<'REGEX'
#https=2//(?<text>.*?)=1jpg#
REGEX;

$text = preg_replace_callback( $pattern, function( $hits )
{
	$r = [
		"=1" => ".",
		"=" => "/"
	];
	return str_replace( array_keys( $r ), array_values( $r ), $hits["text"] );
}, $text );
 
Zuletzt bearbeitet:
erst mal vielen dank, er sagt mir aber es gibt einen syntaxfehler, den kann ich leider nicht wirklich ausfindig machen:

Bildschirmfoto 2015-07-09 um 13.50.38.png
 
Die Fehlermeldung lautet? Welche PHP-Version?
 
ich sehe nur links den roten strich im code. das da scheinbar irgendwas nicht funktioniert ? Oder lügt mich mein Tool an ? ;)
 
Ich weiß nicht. Der Code ist komplett valide, da gibts keinen Syntaxfehler. Wie gesagt: Welche PHP-Version? Die Short Array Syntax kam mit 5.4 dazu. Außerdem ist es nicht von Relevanz was ein Tool sagt, sondern was der Interpreter/Compiler meldet.
 
Wenn auch offtopic, aber was ist

Code:
$pattern = <<<'REGEX'
#https=2//(?<text>.*?)=1jpg#
REGEX;

denn für eine Syntax? Meine PHP Zeit ist jetzt schon seit knapp 2 Jahren vorbei, ich meine aber das noch nicht gesehen zu haben?!
 
Nowdoc

Kurzform: Es gibt vier Typen.

  • Strings in Hochkommas - wird so genutzt wie es dasteht, Hochkommas im String müssen escaped werden
  • Strings in Anführungszeichen - evaluiert Steuerzeichen (\r, \n, \t, ...) und wertet Variablen innerhalb aus
  • Heredoc - siehe Strings in Anführungszeichen, String fängt bei <<<XY an und hört bei XY; am Zeilenanfang auf
  • Nowdoc - siehe Strings in Hochkommas, jedoch Vorzüge von Heredoc

In C# würde dies (Nowdoc) Verbatim Strings entsprechen @"...".

Der Vorteil der Methode: In ner ordentlichen IDE (PhpStorm) kannst du hierbei andere Sprachen dynamisch injecten. Heißt <<<XML ... XML; im PHP-Code veranlasst den Syntax Highlighter dazu den XML-Highlighter zu nutzen. Geht auch wunderbar mit <<<SQL ... SQL; <<<JS ... JS; oder je nachdem was du in den Settings eingestellt hast. Plus bekommst du auch wunderbares Code Completion dazu (bei SQL bspw. Spalten, Tabellen, Funktionen, ...), Auto-Closing XML/HTML-Tags usw.
 
Zuletzt bearbeitet:
Einfach ein REGEX, der Teil der gewünscht ist kommt in runde Klammern.
Auf den Inhalt der Klammer kannst dann per $1 zugreifen, bzw. per Backreference \1 mitten im Regex selbst.

Bei mehreren Klammern gibt es auch ein $2, $3 ... usw.
Z.b. sowas in der Art hier:

PHP:
https=2//(.*?((?:=1)|(?:,)).*?)=1jpg#

Dann hättest den ganzen Treffer in $1 und die zu ersetzenden Dinger in $2 (oder umgekehrt?!?)
?: verhindert dass die Klammer in eine Variable kommt.

Wäre der reine Regex Weg. Kannst natürlich auch nur das dazwischen suchen und dann per String Funktionen ersetzen. Ist halt nur doppelt gemoppelt weil die String Funktionen selbst REGEX und Gruppen nutzen :D
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben