Bekannter String bis Leerzeichen ersetzen

radarin

Angesehenes Mitglied
Einen bekannten String wie z.B. 'abc' durch einen Beliebigen mittels replace zu ersetzen ist kein Problem. Allerdings möchte ich auch alle Zeichen die sich direkt an 'abc' anschliessen (und nicht bekannt sind und von unterschiedlicher Länge sind) bis zum nächsten Space ermitteln. Also z.B.:

'abc123' oder 'abc123456', oder 'abcjkfdjhrzthzggfkgkd'

Wie kann ich also die Zeichen nach 'abc' bis zum nächsten Space in eine Variable schreiben um diese dann weiter zu verarbeiten..?
 
Das schreit nach preg_replace()
ph34r.gif


Ein Thema, das für mich unvermeidlich wäre, ich aber immer geschickt umschifft habe
biggrin.gif

Kann Dir also keine Code-Zeile geben, aber irgend jemand kann das sicher.
 
CODE
$str = 'abclkasdlkjfdas dfllasdabcfs d';

$preg = 'abc([^\s]*)';

echo preg_replace("/$preg/", "", $str);

/* ausgabe: dfllasd d */



wobei "\s" alle whitespace-zeichen sind. ginge auch mit

CODE
$preg = 'abc([^ ]*)';

 
geht das auch wenn abc am schluss ist und kein whitespace folgt?
ph34r.gif


$str = 'abclkasdlkjfdas dfllasdabcfs dabc';
 
ups, habe ich mich doch glatt verlesen, du wolltest den string nach abc? den gibts so:

CODE
$str = 'abcAlarm abcdötz d';
$preg = 'abc([^\s]*)';
$match = preg_match_all("/$preg/", $str, $arr);

print_r($arr[1]);

ausgabe: Array ( [0] => Alarm [1] => dötz )


 
QUOTE (eVolver @ Fr 26.8.2005, 14:20) geht das auch wenn abc am schluss ist und kein whitespace folgt?
ph34r.gif


$str = 'abclkasdlkjfdas dfllasdabcfs dabc';

denke, ja, bei der zweiten variante ist das letzte feld dann halt leer.
 
Das klappt aber so nicht richtig

CODE print_r($arr[1]);


Das ergibt diese ausgabe: Array ( [0] => Alarm [1] => dötz ). Aber ich will ja wirklich nur Alarm.

Ausserdem, das mit dem Array gestaltet sich dann doch sehr umständlich. Beim ersten Vorkommen von 'abc' will ich genau mit den Folgezeichen bis zum Leerschlag was machen. Dan ist gut. beim nächsten Vorkommen muss wieder bei Null anfangen.

Eigentlich geht es darum ein 'www' zu erkennen und das darauffolgende 'domain.ch' zu merken, damit ich bei der Ausgabe den HTML gode für einen Link bauen kann. Ist das denn wirklich so kompliziert? In Foren ist mir diese Methode schon mehrfach aufgefallen.

Mit einer Replace Funktion kann ich zwar das 'www' erkennen und somit in '<a href="http://www">' umwandeln, aber wie merke ich mir die folgenden Zeichen bis zum nächsten Space? um dann erst dort das abschliessende '</a>' zu setzen..?

Hatte noch nie jemand die Situation, dass User URL's im Text einfügen und diese dann bei der Ausgabe aus der DB als Link auf die Seite kommen sollten..?


CODE
$preg = 'www([^\s]*)';
$ausgabe = ereg_replace($preg, "test", $results[text]);
echo $ausgabe;



Das macht allerdings aus www.airfield-show.ch --> testshow.ch. Es wird niocht auf den nächsten Space geachtet, sondern es wird bereits auf den Bindestrich geachtet...
 
Ja sorry, dann hattest du dich etwas mißverständlich ausgedrückt.

Vielleicht hilf dir das ja weiter: PHP-FAQ
 
Danke, aber damit hab ich es auch schon versucht, aber die User schreiben doch kein http://, immer nur ab www, und das wird ignoriert.

CODE $pattern = '#(^|[^\"=]{1})(http://|ftp://|mailto:|news:|www.)([^\s<>]+)([\s\n<>]|$)#sm';
$echo = preg_replace($pattern,"\\1<a href=\"\\2\\3\" target=_blank><u>\\2\\3</u></a>\\4",$results[text]);


Mit der Ergänzung des 'www.' wird dann zwar auch ein solcher Link erkannt, aber ich bekomme dann <a href="www.domain.ch">www.domain.ch</a>. Und wenn im A-Tag 'http' fehlt funktioniert der link nicht...
 
Hab ma bei mir rumgestöbert, scheint zwar nicht elegant zu sein, aber scheint zu klappen:
CODE
<?php

$str = 'http://www.test.de askdjf fldaölksdj fjfödakjskjdf fjökdjaöskdj jfadf www.google.de aölkdsjfkdjs fjföalkdf öflkjfd akjdö safdjölkasdöf www.yahoo.de aökdjöflkdjs öalkdjs föakdj föadf http://ayom.de laödjj';
echo autoLink($str);


function autoLink($str) {
$str = preg_replace("/(?<!<a href=\")(?<!\")(?<!\">)((http|https|ftp|www):\/\/[\w?=&.\/-]+)/","<a href=\"\\1\">\\1</a>",$str);
return preg_replace("/(?<!<a href=\")(?<!http:\/\/)(?<!\")(?<!\">)((www|http)[\w?=&.\/-]+)/","<a href=\"http://\\1\">\\1</a>",$str);


}
?>
 
Danke, probier das mal heut nacht aus. Eleganter würde ich es wohl auch nicht hinkriegen.
 
Ist nicht von mir sondern irgendwo "entliehen" und lag halt so rum.
 
Zurück
Oben