PHP: preg

Fragen zum Thema HTML, JavaScript, PHP
Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

PHP: preg

Beitrag von naums » Di Aug 16, 2011 10:34 am

Hallihallöchen,

Ich bin über einen Kommentar in der PHP-Funktionsliste gestolpert: http://www.php.net/manual/de/function.s ... php#102221

Der Typ benutzt preg_replace. Kann mir jmd. erklären, was es damit auf sich hat und wie dort etwas sinnvolles rauskommen kann? (weil ich seh da ehrlich gesagt nicht durch). Auf die Schnelle hab ich im Wiki auch nichts gefunden.

MfG naums
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Dubbel
Beiträge: 197
Registriert: So Jul 06, 2008 6:25 pm
Wohnort: Kopenhagen
Kontaktdaten:

Re: PHP: preg

Beitrag von Dubbel » Di Aug 16, 2011 11:49 am

Ähm, preg_replace ersetzt Zeichen, die auf den regulären Ausdruck (regular Expression, der erste Parameter) passen, mit den Zeichen des zweiten Parameters in der Variable, die als dritter Parameter übergeben wurde.

Code: Alles auswählen

$text = preg_replace("@<\?@", "#?#", $text);
Das @ ist der Begrenzer, der den eigentlichen Ausdruck halt... begrenzt ^^ Der besagt, dass <? ersetzt werden soll. Der Backslash maskiert das Fragezeichen, da das Fragezeichen eigentlich in regEx dafür steht, dass des vorangegangene Zeichen vorkommen kann, aber nicht muss. Ersetzt wird das ganze dann durch ein einfaches Fragezeichen, so dass z.B. "<?php" zu "?php" wird, und dem Code nichts böses anhaben kann.

Wolltest du das wissen? :D

Edit: Die Raute im zweiten Parameter dient auch als Begrenzer, da kann man mehrere Zeichen nehmen, normalerweise nimmt man den normalen Slash /. :)

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: PHP: preg

Beitrag von naums » Mi Aug 17, 2011 8:29 am

aso. Also der hier:

Code: Alles auswählen

$text = preg_replace("@<!--@", "#!--#", $text);
ersetzt dann alle <!-- durch !--. aber das hier versteh ich jetz trotzdem nicht ganz:

Code: Alles auswählen

  $text = preg_replace("@#\?#@", "<?", $text);
  $text = preg_replace("@#!--#@", "<!--", $text);
Was machen die @ und # dort? Sind beides Begrenzer. Und im zweiten Parameter gibts dann garkeinen? Wozu dienen die Begrenzer? Werden die wirklich mit entfernt/mit reingesetzt oder sind die einfach da, aber man kann sie im String net finden. Warum hat der 2. Parameter keine Begrenzer?

MfG Naums
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Dubbel
Beiträge: 197
Registriert: So Jul 06, 2008 6:25 pm
Wohnort: Kopenhagen
Kontaktdaten:

Re: PHP: preg

Beitrag von Dubbel » Mi Aug 17, 2011 11:34 am

Oh, du hast Recht, der zweite Parameter ist einfach nur ein String, kein regulärer Ausdruck. Also wird da die Raute nicht als Begrenzer genommen, sondern einfach mit reingesetzt.
Und mit dem beiden letzten preg_replaces wird dann nach #?# gesucht (begrenzt von den @s) und das wieder ersetzt... :)

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: PHP: preg

Beitrag von naums » Mi Aug 17, 2011 7:52 pm

okay. Danke :)
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: PHP: preg

Beitrag von naums » Sa Sep 03, 2011 10:13 am

ist es mit preg_replace auch möglich mehrere Zeichen gleichzeitig zu ersetzen? zum Beispiel alle Arten von ä,ö,ü,ß,/()\}{ und leerzeichen, sozusagen alles was im als pfadangabe im inet nie verwendet werden sollte?
.globl truth
truth:
mov r0, #42
mov pc, lr

nouseforname
Beiträge: 236
Registriert: Do Feb 10, 2011 6:31 pm

Re: PHP: preg

Beitrag von nouseforname » So Sep 04, 2011 6:56 am

zB.: so:

Code: Alles auswählen

 $data = preg_replace(array('/(?TEXT1)/','/\r(?TEXT2)/'), "ERSETZEN", $data);
oder so:

Code: Alles auswählen

 $data= preg_replace('/[^A-Za-z0-9]/', '', $data);

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: PHP: preg

Beitrag von naums » So Sep 04, 2011 3:13 pm

oh mein gott. Kannst du mir erklären was das bedeutet und warum der dann die zeichen ersetzt?
.globl truth
truth:
mov r0, #42
mov pc, lr

nouseforname
Beiträge: 236
Registriert: Do Feb 10, 2011 6:31 pm

Re: PHP: preg

Beitrag von nouseforname » So Sep 04, 2011 5:31 pm

naums hat geschrieben:oh mein gott. Kannst du mir erklären was das bedeutet und warum der dann die zeichen ersetzt?
preg_replace arbeitet mit Regex, dieses dient dazu Suchmuster zu erstellen.

Beispiel:

Code: Alles auswählen

[^A-Za-z0-9]
in den [...] gibt man das Suchmuster an
^ invertiert die Suche
A-Z = alle Großbuchstaben von A-Z
a-z = alle Kleinbuchstaben von a-z
0-9 = alle Zahlen zwischen 0-9 (sind ja alle)

Aus dem ersten Beispiel:
?TEXT = markiert den Beginn eines Wortes
(..) trennt Suchmusster in Arrays auf wenn notwendig.


Das Suchmusteer bedeutet also "Finde alle Zeichen die NICHT A-Z, a-z oder 0-9 sind. In Verbindung mit preg_replace wird das ganze dann in oben genanntem Beispiel einfach nur gelöscht.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: PHP: preg

Beitrag von nufan » So Sep 04, 2011 6:09 pm


Antworten