PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : regulärer Ausdruck


nivram
20.02.2005, 18:09:12
Man ich nerve dieses Forum ja extrem ^^

Ich möchte vor und nach einem Suchtreffer 25 Zeichen mit ausgeben lassen.

Mein regulärer Ausdruck lautet:

eregi("^.{0-50}".$suchbegriff.".{0-50}^",$inhalt , $regs);

$regs[1] sollte der erste Treffer sein, der ausgegeben wird.

Die Zeichen vor und nach dem $suchbegriff können alle zeichen sein.

Ich hoffe einer kennt sich damit aus ^^

Ich bekomme nur folgenden Fehler:

Warning: eregi() [function.eregi]: REG_BADBR in .......includes/suche.inc.php4 on line 30

Gruß,
nivRam

|Coding
20.02.2005, 18:49:43
hi,

versuch es mal so (ist nicht getestet):

preg_match('/.{0,25}'.$suchbegriff.'.{0,25}/', $str, $match);
print $match[0];

wenn $str = 'selfphp ist echt cool', und $suchbegriff = 'echt' ist, ist $match[0] = 'selfphp ist echt cool'. ist $str = 'das ganze projekt selfphp ist nicht nur echt cool, sondern auch der absolute wahnsinn' dann ist $match[0] = 'kt selfphp ist nicht nur echt cool, sondern auch der a'. so sollte es zumindes ablaufen :-)

nivram
20.02.2005, 18:56:03
Okay, es funktioniert.
Sehe ich das richtig, das bei Index 0 der erste, bei 1 der zweite Treffer usw. drinsteht?

Besten Dank schonmal..

Gruß,
nivRam

edit: Wenn wir das mit den Zeichen machen, kann man das auch einbauen das er bis sagen wir 25 vor und nach guckt und dann aber ein Leerzeichen da stehn muss??
Es kann ja sein das wie gesagt es so anfängt ...a ist meine Mutter. "Mama ist meine Mutter" ^^
Da ich aber kein einzelnen Buchstaben dastehen haben will, soll er 25 Zeichen und dann nur ein komplettes Wort nehmen!

|Coding
20.02.2005, 19:11:52
nein, die variable $match wird von preg_match immer als array definiert, in diesem fall ist das array aber immer nur ein element groß. in anderen fällen, wenn teil-treffer gefordert sind z.b. so:


$str = 'das ganze projekt selfphp ist nicht nur echt cool, sondern auch der absolute wahnsinn!';
$suchbegriff = 'echt';

preg_match('/(.{0,25})('.$suchbegriff.')(.{0,25})/', $str, $match);

print $match[0]; // 0-25 zeichen $suchbegriff 0-25 zeichen
print $match[1]; // 0-25 zeichen vor $suchbegriff
print $match[2]; // $suchbegriff
print $match[3]; // 0-25 zeichen nach $suchbegriff

nivram
20.02.2005, 19:37:24
Ok, das mit den Leerzeichen habe ich auch hinbekommen!

Mein Ausdruck sieht nun so aus:

preg_match('/[ ].{0,100}'.$suchbegriff.'.{0,100}[ |.]/', $inhalt, $match);

Kann es sein das preg_match auf Groß und Kleinschreibung achtet?
Wie kann ich das ganze mit eregi machen? Weil das geht nich.. oder ich hab was falsch gemacht!

Gruß,
nivRam

|Coding
20.02.2005, 20:40:46
wenn preg_match nicht auf groß/klein schreibung achen soll, dann setz den modifikator "i" (.../i', $inhalt, $match);"

wenn auf ganze worte geachtet werden soll, dann ist das ganze etwas komplexer zugestalten...

|Coding
20.02.2005, 21:58:05
preg_match('/s.{0,25}'.$suchbegriff.'.{0,25}s/i', $inhalt, $match);
hiermit wird erstens im caseinsensitiv mode gesuch, sprich auf groß und klein schreibung wird nicht geachtet. zweitens, wenn $inhalt = "das ganze projekt selfphp ist nicht nur echt cool, sondern der absolute wahnsinn!", dann ist $match != "kt selfphp ist nicht nur echt cool, sondern der absolu", sondern dann ist $match = " selfphp ist nicht nur echt cool, sondern der ".

es wird also nach dem linken äussersten leerzeichen innerhalb der 25 zeichen und und dem rechten äussersten leerzeichen innerhalb von 25 zeichen gesucht. so werden keine wörter mehr abgeschitten.

desweiteren würde ich dir von ereg oder eregi abraten, da diese im schnitt langsamer und ausserdem nicht so schön umfangreich nutzbar wie preg's sind.

nivram
21.02.2005, 12:50:37
Jau, funktioniert! Danke!


Zwei Fragen noch:

Was bedeutet das "s" ?
Und kennt irgendwer eine verständliche Seite über joins in Abfragen?
Im SQL-Referenzhandbuch hab ich irgendwie nich wirklich schönes gefunden.

Gruß,
nivRam

c4
21.02.2005, 12:59:28
Das 's':
--> http://php.net/manual/en/reference.pcre.pattern.modifiers.php

|Coding
21.02.2005, 13:06:39
"s" steht für "whitespaces" (leerzeichen), sprich das ist die gruppierung von:
leerzeichen (space)
tabulator (tab)
seitenumbruch (formfeed)
wagenrücklauf (carriage return)
zeilenumbruch (newline)

aber vorsicht! "S" ist die negitierung der obigen gruppe.

Das 's':
--> http://php.net/manual/en/reference.pcre.pattern.modifiers.php
carsten, das 's' meinte er nicht :-)

c4
21.02.2005, 13:11:33
carsten, das 's' meinte er nicht :-) Aber dafür kennt er jetzt die Bedeutung von dem 's'. :)

|Coding
21.02.2005, 13:16:54
wenn er die bedeutung schon kannt, hast du dieses wissen jetzt gefestigt oder wie? ;-)

c4
21.02.2005, 13:22:39
wenn er die bedeutung schon kannt, hast du dieses wissen jetzt gefestigt oder wie? ;-) Nicht nur das! Ich habe auch sein Selbstbewusstsein gestärkt, weil er beim Lesen feststellt, dass er das doch alles schon weiß. Dabei wurden Glückshormone ausgeschüttet, die ihm ein Lächeln ins Gesicht zaubern, wodurch die Mundflora mit Frischluft versorgt wird[1], was ihn attraktiver für Frauen macht, was wiederrum sein Selbstbewusstsein stärkt.
Durch all das Selbstbewusstsein geht er gestärkt durch's Leben und wird glücklicher als je zuvor, was übrigens die Lebenserwartung erhöht.

usw. usf.

Du siehst, ein Link kann Dein Leben verändern! :)



[1] Nicht übel nehmen!

nivram
21.02.2005, 13:49:07
Hübsches Mädel hier im Board anwesend? ^^

Ein Lachen hatte ich tatsächlich im Gesicht! Jetzt kann der Tag garnet mehr schöner werden ^^

Aber, nochmal zum Thema: Weiss einer ne Seite mit gut erklärten JOINs?

Gruß,
nivRam

|Coding
21.02.2005, 14:12:56
Du siehst, ein Link kann Dein Leben verändern! :)
in postitiver, wie auch negativer form.
der letzten link dem ich eben folgte, hat mir gesagt, das ich das forum updaten muss... und das an einem besonderen tage wie diesen.... :-(

*argh*

xabbuh
21.02.2005, 16:27:51
Aber, nochmal zum Thema: Weiss einer ne Seite mit gut erklärten JOINs?
http://dev.mysql.com/doc/mysql/de/join.html

c4
21.02.2005, 16:29:19
Ist schon blöd, dass man per Mail den Text zugeschickt bekommt, der ursprünglich eingegeben wurde, somit ist ein nachträgliches Editieren mitunter sehr sinnlos...

xabbuh
21.02.2005, 16:30:33
Ach herrje, hätte ich bloß richtig gelesen.

nivram
21.02.2005, 18:55:43
@ C4:

Ist das an mich gerichtet?

@ xabbuh:

Danke, aber da blicke ich nich wirklich durch. Gibt es da nicht irgendwo schönere Beispiele?


Gruß,
nivRam

c4
22.02.2005, 08:10:25
@ C4:
Ist das an mich gerichtet? Der ursprüngliche Text war für xabbuh. Der neue (editierte) soll bloß klar machen, dass der erste Text Blödsinn war. Also einfach ignorieren.

Ein Tipp zum JOINs der Dir nicht gefallen wird: Google!