WebWork Magazin - Webseiten erstellen lassen, Online Medien, html

Webhoster, Webhosting Provider und Domain registrieren

Home | Registrieren | Einloggen | Suchen | Aktuelles | GSL-Webservice | Suleitec Webhosting
Reparatur-Forum | Elektro forum | Ersatzteilshop Haushalt und Elektronik


Homepage und Webhosting-Forum

Scripte und Programme für PHP, MYSQL. Diskussionen zur Programmierung im Web. Fragen zu CMS, Blogsoftware, Shops, Newsletter und vielen weiteren Scripten.


Forum » PHP & MySQL » regulärer Ausdruck -> nach $ suchen » Antworten
Benutzername:
Passwort: Passwort vergessen?
Inhalt der Nachricht: Fett | Kursiv | Unterstrichen | Link | Bild | Smiley | Zitat | Zentriert | Quellcode| Kleiner Text
Optionen: Emailbenachrichtigung bei Antworten
 

regulärer Ausdruck -> nach $ suchen
von chip
Dann sind wir uns ja einig ;)
von raiserle
Da gebe ich Dir Recht.
Ich habe auch nicht gesagt, dass preg_match schneller ist als strpos, bzw wollte das nicht so formulieren (sry).

Aber in diesem Fall, war mein Gedanke schon bei, "Was ist, wenn 6 mal strpos aufgerufen werden muss, weil nie ein Zeichen drin vor kommt".
Das würde ja bedeuten, dass der komplette String von forn bis hinten 6 mal durchlaufen wird und dies war in meinen Gedanken eher langsamer, als ein regex anzusetzen.

Der Test hats ja auch gezeigt, was aber auch nur beim ersten Aufruf von strpos stimmt, wenn man gleich danach nochmal versucht, sind die Zeiten deutlich schneller als preg_match.

Ähm und noch was zu dem Pattern, das + kann dort auch weg, er soll ja bei einem von den 6 Zeichen eh abbrechen.


Gruß Henrik
von chip
OK, im ungünstigsten Fall ist strpos() wirklich langsamer. Aber, in den meisten Fällen (also nicht bei "synthetischen" Tests) ist strpos() durchaus schneller als preg_match().
von raiserle
@ chip:

Test 3 mal gemacht.
Beim ersten Aufruf der Seite, ist strpos def langsamer... 2-4 ms
wobei preg_match immer um die 0.7 - 1.2 ms liegt ...

(Testumgebung Text mit 415 Zeichen das $-Zeichen steht an der 103 Stelle.)
(das $-Zeichen ist bei mir im letzten Oder-block bei strpos-Prüfung)

Und warum auch denk bitte an die 6 mal, es seid denn es wird gleich im ersten Oder-block das Zeichen gefunden . Also musste er in meinem Beispiel erst
mit 5 Zeichen von Anfang bis Ende durchgehen, bis dann das $ geprüft wurde.

Beim 2ten mal des Aufrufs ist dann aber wirklich strpos schneller (Annahme, liegt im Speicher)

Gruß Henrik
von chip
Ja, du musst die Funktion sechs Mal aufrufen für sechs Zeichen. Aber da kann man sich auch schöne Funktionen basteln, die mehrere Zeichen suchen.

Kleiner Tipp: Mit array_map() oder array_walk() sollte es gehen, wobei du als Array einfach deine Zeichen verwendest.
von Tommmy
huj, großes dankeschön ihr beiden!

@ raiserle, also dein regulärer Ausdruck funktioniert tadellos, obwohl ich jetzt so spontan eigentlich bis auf die |-Zeichen kaum nen Unterschied zu meiner Variante feststellen kann ... naja ich bin ja der Noob und du der Pro, also wirds schon so sein :D

@ chip, also die Funktion, die du vorgeschlagen hast, klingt auch gut und ich kann mir auch vorstellen, dass die schneller ist, aber ähm, wie kannn ich mit der Fkt. nach mehreren Zeichen suchen, oder muss ich die Fkt 6 mal für 6 Zeichen aufrufen? Das wär nämlich nervig ...

also vielen Dank schonma!!!!
von chip
raiserle schrieb am 18.12.2007 14:41
und strpos ist keinesfalls schneller bei 6 zeichen


Das will ich sehen, sonst glaub ich's dir nicht . strpos() führt eine einfache Zeichensuche durch, während bei preg_match() erst die Regexp-Engine "angeworfen" werden muss.
Meiner Meinung nach sollte das deutlich schneller sein.
von raiserle
1: 
2: 
3: 
4: 
5:
<?php
$str=' $ ; <>\' "';
echo preg_match("#[;<>'\"\$]+#",$str);
?>


und strpos ist keinesfalls schneller bei 6 zeichen
aber um auf den regex zu kommen was soll das | immer da drin?
du gibst doch über [...] schon eine zeichenklasse an und nen + hinten dran sagt 1 oder mehr zeichen davon. das | (oder) macht bei sochen sachen sinn
(https?|ftp|xxx):/.... oder wo auch immer es gebraucht wird

gruß
von chip
Um einfach festzustellen, ob ein Zeichen in einem String vorhanden ist, eignet sich die Funktion strpos() besser, da sie wesentlich schneller ist.
von Tommmy
Huhu Leuts!

Also ich habe ein Problem, ich würde gern in einer Zeichenkette nach bestimmten Zeichen suchen lassen, darunter ist auch das "Dollarzeichen" ($).
Ich möchte, dass sobald eines der aufgeführen Zeichen gefunden wurde, die Funktion preg_match true zurück gibt. Mein Suchmuster sieht bis jetzt so aus:

1:
"[;|<|>|\'|\"|\$]"


Das Problem ist nur, dass bei diesem Suchmuster leider bei jeden String ein "Erfolg" vermeldet wird (auch wenn keins der Zeichen enthalten ist) ...
Lasse ich das |\$ weg, dann klappt alles hervorragend, also sobald ein < oder > oder ' oder " oder ; im String sind, dann wird ein "Erfolg" vermeldet, ansonsten nicht ...

Ich hatte schon die Idee einfach das Dollarzeichen mit HIlfe seines ANSI-Codes anzugeben, doch ich konnte bisher leider nciht herausfinden wie ich das machen kann ...

Ich hoffe mir kann jmd helfen, danke!

Nach oben