Antworten auf deine Fragen:
Neues Thema erstellen

PCRE Regular Expression Frage

M

Marotzke

Guest

Hallihallo, ich hab eine hoffentlich leichte Frage zu den PERL-komaptiblen regulären Ausdrücken in PHP ... bzw. ist es eher eine allgemeine Frage der Machbarkeit:

Der unten gezeigte Code erzeugt folgende Ausgabe:
Code:
[23/Apr/2009:18:51:19 +0200]
PHP:
$string = 'Dies ist Text. [23/Apr/2009:18:51:19 +0200] Hier steht auch Text.';
$search = '~\[.*\]~';
$result = '';

preg_match($search, $string, $result);

echo $result[0];
Das ist soweit auch erwünscht - mit Ausnahme der eckigen Klammern. Meine Frage wäre daher, WIE kann ich nach einem bestimmten Zeichen suchen, es aber nicht mit ausgeben lassen? Mich interessiert eigentlich nur der Inhalt zwischen den Klammern.

Natürlich könnte ich es auch nachträglich rauskürzen mit str_replace oder so, aber wenn es über RegEx ginge, fände ich es hübscher.


Geht sowas überhaupt?
 

AW: PCRE Regular Expression Frage

PHP:
$search = '~\[(.*)\]~';
soo falls ich dich richtig verstanden hab^^ ist dann aber im array[1]^^
 
AW: PCRE Regular Expression Frage

> sollte man auf regex verzichten (performance)

Klar .... sofern [ und ] einmal vorkommen

PHP:
$string = 'Dies ist Text. [23/Apr/2009:18:51:19 +0200] Hier steht auch Text.';

$pos1 = strpos($string, '[');
$pos2 = strpos($string, ']');

echo substr($string, $pos1 + 1, $pos2 - $pos1 - 1);
 
AW: PCRE Regular Expression Frage

Hi, danke für die Antworten!

Vom Performance-Problem habe ich schonmal gehört... aber das mit dem Gruppieren ist doch eine recht einfach Lösung, wie mir scheint :-)

Gibt es eigentlich nur 10 Gruppen? \0 bis \9?


Das mit dem String abschneiden find ich nicht so gut, auch wenns schneller ist, aber ist mir zu viel zu tippen = schwerer zu lesen = unflexibler was das abzuschneidende Zeichen angeht.

Aktuell brauche ich das nur, um die Server-Logs in ein hübscheres Format umzuwandeln und per CSS zu formatieren.



Mal schauen vielleicht mach ich mir ne Klasse draus dann ists eh egal (ich hoffe ich nehm mir da nicht zu viel vor).
 
AW: PCRE Regular Expression Frage

Du findest das unübersichtlicher
PHP:
$string = 'Dies ist Text. [23/Apr/2009:18:51:19 +0200] Hier steht auch Text.'; 

$pos1 = strpos($string, '['); 
$pos2 = strpos($string, ']'); 

echo substr($string, $pos1 + 1, $pos2 - $pos1 - 1);
als das
PHP:
$string = 'Dies ist Text. [23/Apr/2009:18:51:19 +0200] Hier steht auch Text.';

$search = '~\[(.*)\]~';
$result = '';

preg_match($search, $string, $result);

echo $result[1];
?

Ähm, na klar -_-

Man kann sich auch was schön reden. Aber es ist ja deine Performance...
 
AW: PCRE Regular Expression Frage

Auch wenn es ca. 1,5x langsamer ist (hört sich jetzt viel an, aber das spielt sich iwo im 5. Kommabereich ab^^), finde ich den Einsatz hier nicht soo verkehrt. Es kann ja sein, dass er es um einige Funktionen erweitern möchte, was so bei den String Funktionen nicht möglich wäre. Desweiteren glaub ich dass die Denkweise von der Rechenperformance ziemlich altbacken ist - kommt es heute nicht eher darauf an, dass eine Software Erweiterbar, Wartbar, Redundanzfrei... ist/bleibt?! Da zwischen den genannten Punkten und der Performance oft ein Konflikt herrscht, würde ich mich eher den Punkten widmen^^
 
Zuletzt bearbeitet:
AW: PCRE Regular Expression Frage

@Top_Gun
Ich komm halt mit den Stringfunktionen nich so klar, mit "nimm hinten 2 Stellen weg und vorne oder überspring irgendwas und fang ab da an" .... bähh. Ein regulärer Ausdruck sieht kompliziert aus, liest sich aber wie eine Geschichte von vorn nach hinten. Mit dem x-Modifier kann man die auch nett formatiern (sofern Einsatz möglich).

Die Performanceunterschiede sind allerdings doch beachtlich ... aber da ich nicht für irgendwelche Großunternehmen, sondern privat für "kleine Leute" kleine Dinge programmiere, und sich das nie ändern wird (bin nun mal eigentlich kein Coder), ist mir das egal.


Aber ich glaub darüber kann man endlos streiten .. ich denk es kommt aufn Zweck an, und ich bin nunmal zu faul die ganzen String-Beschnibbelungs-funktionen zu lernen :-D
 
AW: PCRE Regular Expression Frage

Die Performanceunterschiede sind allerdings doch beachtlich ... aber da ich nicht für irgendwelche Großunternehmen, sondern privat für "kleine Leute" kleine Dinge programmiere, und sich das nie ändern wird (bin nun mal eigentlich kein Coder), ist mir das egal.
Ob die Seite 10 Besucher am Tag hat oder 1 Besucher am Tag macht nun keinen Unterschied, denn jeder wird merken, dass es länger dauert. Kannst ja mal an einem Livebeispiel nen Test machen, wie groß die Differenz ist...

ich bin nunmal zu faul zu [...] lernen :-D
Schade...
 
AW: PCRE Regular Expression Frage

> Ich komm halt mit den Stringfunktionen nich so klar
Ist auch irgendwie verständlich, denn es ging mir früher aus so!

Vielleicht sollte man das mit den Stringfunktionen etwas anders erklären, als im PHP-Handbuch.

Mit RegExp zu arbeiten bedeutet auch, dass man eine zusätzliche Maschine im PHP anwirft. Wie ein Zussatzgetriebe in einer mechanischen Maschine :) Diese zusätzliche Maschine ist jedoch komplexer aufgebaut als normale, da diese Maschine flexibler arbeiten soll. So ein regulärer Ausdruck muss mehrere Zeichen und Varianten vergleichen damit der gesuchte String gefunden wird. Das ist der Grund warum der Einsatz von RegExp etwas länger braucht. Ich will aber nicht verschweigen, dass ab PHP5 hier einiges in der Performance verbessert wurde.

Die Stringfunktionen sind (fast) starre Funktionen. strpos() sucht solange bis der String gefunden wurde, und gibt dann die Postion in der Zeichenkette zurück. RegExp rammelt durch den kompletten Text durch. substr() hat den großen Vorteil, dass man einen bestimmten String nicht suchen muss, sondern man gibt gleich die Position vor wo der String steht.

Man stelle sich ein Buch mit 100 Seiten vor:

Fall 1 mit RegExp:
RegExp würde das komplette Buch durchsuchen, egal ob das gesuchte schon gefunden ist oder nicht.

Fall 2 Stringfunktionen:
Man sucht nur die Postionen und gibt den Inhalt der Seite im Buch wieder, wo das gewünschte steht. Dadurch wird das ganze etwas schneller.

Zum Schluss noch ein Witz an der kleinen Geschichte:
Die meisten Funktionen in PHP, und auch RegExp, basieren auf den Stringfunktionen. Dies kann man sich aus dem Quellcode der Funktionenn entnehmen.

Wer sich nun für was entscheidet, ist jedem selber überlassen :)
 
AW: PCRE Regular Expression Frage

Ja so steht es im Handbuch ... bin mir da aber nicht so 100%ig sicher, da preg_match() und preg_match_all() diese gleiche Perl-Funktion (php_do_pcre_match) benutzen - muss ich passen.
Und selbst wenn es so ist, werden denoch Perl-Scripte mit über 5000 Zeilen Code für RegExp benutzt.
 
AW: PCRE Regular Expression Frage

@Top_Gun
Stimmt, da war mein Denkansatz wohl falsch. Das mit dem Live-Test werde ich mal durchführen ... unser Hoster ist sowieso was langsamer als man sich wünscht (dafür halt billig).

Habe hier im übrigen nicht nur einen netten Blog zum Thema, sondern auch eine vielversprechend klingende Klasse dazu gefunden:


Sollten da wirklich erhebliche Unterschiede zutage kommen, werde ich es schon ändern ... mal schauen vielleicht gibts ja noch was einfacheres, als so ne Rechnung wie im echo von substr da oben aufzustellen ... werde mich mal durch die Array/String-Funktionen auf php.net lesen wenn ich Zeit hab.


Ich denk aber, das Thema ist hier erstmal durch ;-)
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.867
Beiträge
1.539.637
Mitglieder
67.864
Neuestes Mitglied
Ramar_50_
Oben