PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   regulärer Ausdruck (http://www.selfphp.de/forum/showthread.php?t=9814)

nivram 20.02.2005 18:09:12

regulärer Ausdruck
 
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

AW: regulärer Ausdruck
 
hi,

versuch es mal so (ist nicht getestet):
PHP-Code:

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

AW: regulärer Ausdruck
 
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

AW: regulärer Ausdruck
 
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:

PHP-Code:

$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

AW: regulärer Ausdruck
 
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

AW: regulärer Ausdruck
 
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

AW: regulärer Ausdruck
 
PHP-Code:

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

AW: regulärer Ausdruck
 
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

AW: regulärer Ausdruck
 
Das 's':
--> http://php.net/manual/en/reference.p....modifiers.php

|Coding 21.02.2005 13:06:39

AW: regulärer Ausdruck
 
"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.

carsten, das 's' meinte er nicht :-)


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:27:04 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.