php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2010

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.02.2010, 06:19  
Neuer Benutzer
 
Registriert seit: 14.08.2008
Beiträge: 27
PHP-Kenntnisse:
Fortgeschritten
web4free befindet sich auf einem aufstrebenden Ast
Standard Regular Expressions - Umsetzungsproblem

Hi Leute,

Ich bin jetzt gestern lange gesessen und habe versucht mit Hilfe verschiedener Foren und Google auf meine Lösung zu kommen.
Reguläre Ausdrücke sind für mich immer noch ein Buch mit 5 Siegeln...

Folgende Zeichenketten sollen in entsprechendes HTML geändert werden:
---- wird zu <hr>
**zwei Wörter** wird zu <b>zwei Wörter</b>

Soweit ist es kein Problem und mein Lösungsansatz würde so aussehen:
PHP-Code:
$inhalt preg_replace('#---#Uis''<hr>'$inhalt);
$inhalt preg_replace('#\*\*(.*)\*\*#Uis''<strong>\\1</strong>'$inhalt); 
Schwieriger wird schon mit dieser Zeile:
\\ wird zu einen <br>

Und der völlige Ausstieg passiert mit dieser Aufzählung:
* Erstens\\ soll zu einen <li>Erstens</li> werden
* Zweitens\\ soll zu einen <li>Zweitens</li> werden
* Drittens\\ soll zu einen <li>Drittens</li> werden usw.

Logisch dass hier dann noch zu Beginn ein <ul> und am Ende ein </ul> stehen sollte.

Würde mich freuen wenn Ihr mir helfen könnt.
Vielen Dank
lg.
Werner
web4free ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 02.02.2010, 07:51  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.486
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Deinen ersten Fall könntest Du noch ohne RegEx lösen:
PHP-Code:
$inhalt str_replace('---','<hr>',$inhalt); 
Das Zweite kannst Du so lösen:
PHP-Code:
// \D = Nicht-Ziffern, also alle anderen Zeichen zulassen
$inhalt preg_replace("#\*\*(\D)+\*\*#i""<strong>$1</strong>"$inhalt);

// \w = Läßt Buchstaben, Ziffern und Unterstrich zu
$inhalt preg_replace("#\*\*(\D)+\*\*#i""<strong>$1</strong>"$inhalt);

// Für den Fall, daß nur Buchstaben zugelassen sind
$inhalt preg_replace("#\*\*([a-z]+\s[a-z]+)*\*\*#i""<strong>$1</strong>"$inhalt); 
Wobei ich bei der letzten Variante nicht wirklich sicher bin.

Ein imho gutes Tutorial über Regular Expressions gibt es hier.
Arne Drews ist offline  
Alt 02.02.2010, 09:01  
Erfahrener Benutzer
 
Registriert seit: 01.12.2009
Beiträge: 645
PHP-Kenntnisse:
Fortgeschritten
draco88 befindet sich auf einem aufstrebenden Ast
draco88 eine Nachricht über ICQ schicken
Standard

Warum benutzt du keinen normalen BB-Code, da gibt es haufenweise Parser für, die du beliebig erweitern kannst.
draco88 ist offline  
Alt 02.02.2010, 10:18  
Neuer Benutzer
 
Registriert seit: 14.08.2008
Beiträge: 27
PHP-Kenntnisse:
Fortgeschritten
web4free befindet sich auf einem aufstrebenden Ast
Standard

@Arne Drews
Danke für den Link - den werde ich mir jetzt mal durchsehen - leider hast Du mir bei den beiden Sachen geholfen, die bei mir eh schon funktionieren, was ich auch geschrieben hatte.
Ich wollt eigendlich die Hilfe beim \\ - obwohl ich das auch mittels str_replace lösen könnte - und für die Aufzählung.

@draco88
Warum ich keinen BB-Code verwende? Mir stellt sich die Frage warum die, von denen die Texte kommen das nicht mittels BB-Code umgesetzt haben, was für unsereiner einfacher gewesen wäre.
Im Klartext: Ich bekomme von extern Datensätze die ich verarbeiten muß. Seit gestern werden bei den Datensätzen eben jene Formatierungen benutzt die ich jetzt versuche umzusetzen.
web4free ist offline  
Alt 02.02.2010, 10:48  
Erfahrener Benutzer
 
Registriert seit: 01.12.2009
Beiträge: 645
PHP-Kenntnisse:
Fortgeschritten
draco88 befindet sich auf einem aufstrebenden Ast
draco88 eine Nachricht über ICQ schicken
Standard

PHP-Code:
preg_replace_callback('/\*\s*(.*(?=\\\\))\\\\/s', function($match) {
    return 
'<ul>'.preg_replace('/\*\s*(.*(?=\\\\))\\\\/''<li>$1</li>'$match[0]).'</ul>';
}, 
$text); 
Das sollte die Liste in HTML umwandeln.
Funktioniert nur unter PHP5.3<, ansonsten musst du es ein wenig umschreiben.
draco88 ist offline  
Alt 02.02.2010, 11:23  
Neuer Benutzer
 
Registriert seit: 14.08.2008
Beiträge: 27
PHP-Kenntnisse:
Fortgeschritten
web4free befindet sich auf einem aufstrebenden Ast
Standard

@draco88

Ich habe das jetzt mal probiert mit dem Ergebnis dass er mir eine Fehlermeldung ausspuckt:
PHP-Code:
Parse errorsyntax errorunexpected T_FUNCTION 
Dennoch als Gedankenstoß mal mittels php-doku weitergestöbert und das ganze folgenderweise aufgebaut:
PHP-Code:
$inhalt preg_replace_callback(
 
'/\*\s*(.*(?=\\\\))\\\\/s'
 
create_function(
  
'$match',
  
'return \'<ul>\'.preg_replace(\'/\*\s*(.*(?=\\\\))\\\\/\', \'<li>$1</li>\', $match[0]).\'</ul>\';'
 
), 
 
$inhalt
); 
Also mittels "create_function()".

Nur leider spuckt er jetzt einen anderen Fehler aus den ich nicht finde:
PHP-Code:
Warningpreg_replace(): No ending delimiter '/' found in 
Damit das ganze vielleicht ein bisserl leichter zum Nachvollziehen ist hier mal der bisherige Test-Code:

PHP-Code:
$inhalt '
Hier schreibe ich jetzt einen Text der von einer Linie zum n&auml;chsten getrennt ist.---
Aber auch der **fette** Text darf nicht fehlen und schon gar nicht der \\Zeilenumbruch.
\\\\
Und hier beginne ich mit der Aufz&auml;hlung:
* Erstens\\
* Zweitens\\
'
;
$inhalt str_replace('---','<hr>',$inhalt);
$inhalt preg_replace('#\*\*(.*)\*\*#Uis''<strong>$1</strong>'$inhalt);
$inhalt preg_replace_callback(
 
'/\*\s*(.*(?=\\\\))\\\\/s'
 
create_function(
  
'$match',
  
'return \'<ul>\'.preg_replace(\'/\*\s*(.*(?=\\\\))\\\\/\', \'<li>$1</li>\', $match[0]).\'</ul>\';'
 
), 
 
$inhalt
);
$inhalt str_replace('\\','<br>',$inhalt);
echo 
$inhalt
web4free ist offline  
Alt 02.02.2010, 11:27  
Erfahrener Benutzer
 
Registriert seit: 01.12.2009
Beiträge: 645
PHP-Kenntnisse:
Fortgeschritten
draco88 befindet sich auf einem aufstrebenden Ast
draco88 eine Nachricht über ICQ schicken
Standard

Das nen Parse-Error kommt is kein Wunder, lambda-Funktionen in dieser Form gibt es erst seit 5.3.
Versuchs mal so:
PHP-Code:
$code = <<<CODE
return '<ul>'.preg_replace('/\*\s*(.*(?=\\\\))\\\\/', '<li>$1</li>', \$match[0]).'</ul>';
CODE;
$inhalt preg_replace_callback(
 
'/\*\s*(.*(?=\\\\))\\\\/s'
 
create_function(
  
'$match',
  
$code
 
), 
 
$inhalt
); 
draco88 ist offline  
Alt 02.02.2010, 11:35  
Neuer Benutzer
 
Registriert seit: 14.08.2008
Beiträge: 27
PHP-Kenntnisse:
Fortgeschritten
web4free befindet sich auf einem aufstrebenden Ast
Standard

Verflixt - macht das selbe wie zuvor.
PHP-Code:
Warningpreg_replace(): No ending delimiter '/' found in 
Das <ul></ul> setzt er jedenfalls - nur keine li's **heul**
Was ich bisher verschwiegen habe ist meine PHP-Version - Sorry!
Ich nutze PHP 5.2.9
web4free ist offline  
Alt 02.02.2010, 11:42  
Erfahrener Benutzer
 
Registriert seit: 01.12.2009
Beiträge: 645
PHP-Kenntnisse:
Fortgeschritten
draco88 befindet sich auf einem aufstrebenden Ast
draco88 eine Nachricht über ICQ schicken
Standard

Die 4 Backslashes hintereinander sind anscheinend der Fehler, versuch daraus mal nur 3 oder 2 Backslashes zu machen. Könnte das Problem lösen, bin mir aber nicht sicher
draco88 ist offline  
Alt 02.02.2010, 12:01  
Neuer Benutzer
 
Registriert seit: 14.08.2008
Beiträge: 27
PHP-Kenntnisse:
Fortgeschritten
web4free befindet sich auf einem aufstrebenden Ast
Standard

Leider wars das auch nicht.
Würde mich nur interessieren wie das die anderen machen, die ebenfalls diese Datensätze bekommen.
Es geht ja eigentlich nur mehr um diese dämliche Aufzählung
web4free ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] substr() Problem bei Benutzung in regular expression redder PHP Tipps 2009 5 17.11.2009 16:29
[Erledigt] Eingabe mittels Regular Expressions überprüfen ***tisc*** Beitragsarchiv 3 29.08.2009 11:34
[Erledigt] Regular Expression Telefonnummer cetalian PHP Tipps 2009 10 08.07.2009 18:50
[Erledigt] Regular Expression: Attribute mit &quot; &quot; oder ' ' matchen SeppDepp PHP Tipps 2009 8 20.06.2009 23:00
101: Alles regulär Nikolaus 2.0 Adventskalender 2008 14 08.12.2008 21:08
Regular Ekspräschns phpdummi Off-Topic Diskussionen 12 01.09.2008 13:06
Frage zu Regular Expression Schiedsrichter PHP Tipps 2008 1 19.09.2007 16:41
regular expression? Dilandau PHP Tipps 2006 55 30.06.2006 16:10
regular Expression verstehen GothicFiction PHP Tipps 2006 14 23.05.2006 23:15
Suchen und ersetzen mit Regular Expressions? Datenbanken 0 09.09.2005 15:21
Regular Expression - Alles zwischen Anführungzeichen PHP Tipps 2005-2 3 05.08.2005 14:07
mit regular expressions einen Link umformen?? Wie?? 18inch PHP-Fortgeschrittene 8 19.01.2005 23:45
[Erledigt] Datum mit Regular Expression kontrollieren PHP Tipps 2004-2 7 06.12.2004 09:44
[Erledigt] regular expression: bin zu blöd PHP-Fortgeschrittene 2 08.11.2004 13:12
Regular Expressions PHP Tipps 2004 2 31.07.2004 13:12

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
regular expression escape </li>, regex ul, preg_replace alle zeichen erlauben, php regex match li, regular expression zwei wörter, regex zwei wörter, regex aufzählung, regular expressions an letzte zeile br, regex \zwei wörter\ suchen, regex zwei begriffe, php preg_replace buchstaben ziffern, regex for li, regex \zwei wörter\, preg_replace $1 ergänzen, preg_replace ganzes wort, php str_replace nur ganze wörter strong, php regexp alle ul finden, php li finden regex, str_replace regex, regex php \<ul>\ \<li>\ \<b>\

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:21 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum