Gibt es in PHP das =~ wie in Perl ?

dwex

Erfahrenes Mitglied
Hallo Leute,

ich habe Früher (zur grauen Urzeit) mal Perl programmiert.

Wenn ich in einem String nach einem Vorkommniss suchen wollte haben ich z.B. folgendes in mein Script eingefügt:
PHP:
if($email=~/mailinator.com/)
{
&error;
}
Also hier wurde in der Variable $email nach dem Vorkommen von "mailinator.com" gesucht. das fimktioniert ja nicht mit PHP.
Gibt es hier auch eine einfache Lösung ohne gleich mit REGEX zu arbeiten.
explode() habe ich mir schon angeschaut - aber das ist ja auch noch umständlicher hier mit den arrays und so (bitte nicht falsch verstehen).

Ausserdem würde mich interessieren, da ich in o.g. Schnippsel mit &error; ein Sub-Programm innerhalb Perl aufrufen kann - gibt es hier was vergleichbares für PHP?

Vielen Dank im Voraus!
 
Wenn du einfach nur ein Vorkommen eines Strings in einem anderen prüfen willst, kannst du [phpf]strpos[/phpf] verwenden.

Ich weiß jetzt nicht genau, was du mit „Sub-Programm“ meinst (hab selber schon lang kein Perl mehr angerührt), aber eventuell kann man ein derartiges Verhalten mit Funktionen umsetzen.

PS: Sicher, dass die Zeile if($email=~/mailinator.com/) so richtig ist? Sollte man da nicht dem Punkt ein \ voranstellen?
 
Hallo,

vielen Dank für die prompte Antwort.
Ich werde mir die Funktion gleich mal anschauen.

Ich bin mit 102% sicher, dass die Codezeile funktioniert.
Ich habe das einfach mal aus einem meiner alten Scripte, welches schon seit Jahren erfolgreich läuft rauskopiert :)

Mit Sub-Programm meine ich tatsächlich ein Programm im Programm.
Wenn ich, wie im Beispiel, &error; aufrufe dann wird in meinem Perlscript alles was unter "sub error" steht ausgegeben - ein Sub-Programm einfach.

Hier ein Beispiel:
Code:
if($action eq "new")
{
&get_date;
&new;
}
Also wenn die "action" = "new" ist dann soll er mir diese beiden "Sub-Programme" ausführen.
get_date sieht dann z.B. so aus:
Code:
sub get_date {

    @days   = ('Sonntag','Montag','Dienstag','Mittwoch',
               'Donnerstag','Freitag','Samstag');
    @months = ('Januar','Februar','März','April','Mai','Juni','Juli',
               'August','September','Oktober','November','Dezember');

    ($sec,$min,$hour,$mday,$mon,$year,$wday) = (localtime(time))[0,1,2,3,4,5,6];
    $time = sprintf("%02d:%02d:%02d",$hour,$min,$sec);
    $year += 1900;

    $date = "$days[$wday], $mday. $months[$mon] $year um $time";

}
Aber du könntest schon Recht haben mit den Funktionen - ABER ich kann doch in den Funktionen nicht die Variablen übernehmen ohne Sie selbst an die Funktion zu übergeben - das ist sehr umständlich - oder gibt es da sowas wie die Globalisierung der Variablen?

Ich bin wahrscheinlich zu doff - oder schreibt man das doof :-) :confused: :-(
 
dwex hat gesagt.:
Ich bin mit 102% sicher, dass die Codezeile funktioniert.
Ich habe das einfach mal aus einem meiner alten Scripte, welches schon seit Jahren erfolgreich läuft rauskopiert :)
Und ich bin mir zu 99% sicher, dass die Zeile zwar in den meisten Fällen das Richtige macht, aber auch unerwartetes Verhalten aufzeigen kann. Überprüfe beispielsweise mal, ob die If-Abfrage auf "mailinatoricom@domain.com" anspringt.

Mit Sub-Programm meine ich tatsächlich ein Programm im Programm.
Wenn ich, wie im Beispiel, &error; aufrufe dann wird in meinem Perlscript alles was unter "sub error" steht ausgegeben - ein Sub-Programm einfach.
Das wäre dann so ziemlich identisch mit einer Funktion :)

Aber du könntest schon Recht haben mit den Funktionen - ABER ich kann doch in den Funktionen nicht die Variablen übernehmen ohne Sie selbst an die Funktion zu übergeben - das ist sehr umständlich - oder gibt es da sowas wie die Globalisierung der Variablen?
Wieso umständlich? Das sorgt doch für Übersichtlichkeit. Man erkennt sofort, welche Eingaben die Funktion erwartet bzw. verwendet. Globale Variablen kann man notfalls (ich rate nicht dazu) über das Array $_GLOBALS definieren. Oder man verwendet in der Funktion ein global-Konstrukt.
 
Hallo,

vielen Dank erstmal für deine ausführungen.
Ich werde deinen Rat mit den Globalen befolgen und das nicht so machen.
Was das Perl-Script angeht - ich habe es getestet so wie du sagst und es hat mir die Mail wie gewünscht NICHT gefiltert - wenn ich jedoch blabla@mailinator.com eingebe dann wird sie wunschgemäß gefiltert :)

Ich bin halt noch sehr auf Perl fixiert und stehe erst am Anfang meiner PHP-Karriere und da sind schon Punkte die für mich in Perl total logisch (und eben einfach) sind und in PHP so nicht funktionieren und dann ist das eben umständlich für mich.

Also nochmals Danke für deine Hilfe
 
Zurück