Zurück tutorials.de > Tutorials > Programming - Tutorials > PHP - Tutorials

 
 
Hallo und herzlich willkommen! Tutorials.de ist eine Hilfe-Community mit dem Motto User helfen Usern. Als Gast verfügst Du über Schreibrechte in unseren Foren und Blogs. Du kannst dich aber gerne auch kostenlos registrieren und Teil unserer Gemeinschaft werden! Viel Spaß & Erfolg bei der Vermehrung deines Wissens :-)

Themen: 242.975 | Beiträge: 1.352.293 | Mitglieder: 169.418 (Stand 28.01.10) | Fragen zur Nutzung von Tutorials.de? Nutzungsregeln | Kontaktformular | Impressum
 
 
tutorials.de Buch-Verschenkaktion

  Tutorial geschlossenGeschlossen    
  Tutorial geschlossenGeschlossen    
 
LinkBack (41) Tutorial-Optionen Ansicht
Reguläre Ausdrücke - Teil 1
Reguläre Ausdrücke - Teil 1
Veröffentlicht von Tim Comanns
15.01.04
Reguläre Ausdrücke - Teil 1

Mit den PCRE (Perl Compatible Regular Expressions) Funktionen bietet PHP die Möglichkeit vorhandene Strings mit Hilfe eines Patterns zu untersuchen und bei Bedarf zu ersetzen.
Doch was sind Reguläre Ausdrücke überhaupt ? Reguläre Ausdrücke sind Muster (Pattern), mit denen man z.B. überprüfen kann, ob eine Zeichenkette bestimmten Vorgaben, die im Pattern festgelegt werden, entspricht.
Ich kann aus eigener Erfahrung sagen, dass, solange man Reguläre Ausdrücke nicht verstanden hat, man alles versucht um sie zu meiden, da die Pattern teilweise doch recht kryptisch und unverständlich aussehen. Doch wenn man einmal den Durchblick durch das, durchaus logische, System der Regulären Ausdrücke erlangt hat, möchte man sie nicht mehr missen.
Wie aus meinem Einleitungsteil evtl. schon zu erkennen, werde ich in diesem Tutorial zum einen auf den allgemeinen Aufbau der Regex (Regex = Regular Expression = Regulärer Ausdruck) Pattern, sowie auf Backreferences eingehen. Beides werde ich an den beispielhaften Funktionen preg_match() und preg_replace() zeigen und erklären. Auf die weiteren PCRE Funktionen werde ich nicht näher eingehen, da ich denke, dass nachdem man die Grundlagen verstanden hat, sich das erlangte Wissen leicht portieren lässt.

Ein gewöhnliches Muster (Pattern) besteht in PHP aus drei Teilen.

/pattern/i

Delimiter: Das eigentliche Muster wird von sogenannten Delimitern am Anfang und am Ende begrenzt, damit für den Interpreter ersichtlich ist, wo das Muster anfängt und wo es aufhört. Jedes nicht-alphanumerische Zeichen ausser dem \ darf als Delimiter genutzt werden. Es ist also nicht zwingend nötig den / als Delimiter zu nutzen. Oft genutzt werden neben Schrägstrich auch das Prozentzeichen oder das Ausrufezeichen.

Pattern: Dies ist das eigentlich Muster, das im weiteren Verlauf des Tutorials behandelt wird.

Modifier: Nach dem abschließenden Delimiter können sogenannte Modifier angehängt werden, die ebenfalls in einem gesonderten Abschnitt dieses Tutorials behandelt werden.

Damit wir im folgenden einen etwas besseren Bezug zur realen Anwendung haben, führe ich kurz die zwei Funktionen preg_match() und preg_replace() ein.

preg_match()

Betrachtet man sich die PHP-Manual Seite zu preg_match() findet man folgendes vor.

int preg_match ( string pattern, string subject [, array matches [, int flags]])

Für uns sind an dieser Stelle erst mal nur die zwei zwingenden Parameter pattern und subject interessant. Für matches und flags möge man bitte die PHP Seite konsultieren, sie sind für das essenzielle Verständnis von Regulären Ausdrücken nicht zwingend notwending.

Die Funktion erwartet also, dass sie zum einen ein Suchmuster übergeben bekommt (pattern), sowie eine Zeichenkette (subject) auf die sie das Muster anwenden kann.
Als Rückgabewert liefert diese Funktion TRUE bzw. 1 wenn die Suche nach dem Muster erfolgreich war und FALSE bzw. 0 wenn keine Übereinstimmung gefunden wurde.

preg_replace()

Hier sieht die Dokumentation von php.net folgendermaßen aus.

mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])

Diese Funktion erwartet genau wie auch preg_match ein Suchmuster (pattern) und eine Zeichenkette auf die das ganze angewendet werden soll (subject), jedoch zusätzlich eine Zeichenkette, die an Stelle der gefundenen Bereiche eingesetzt wird (replacement).

Wie man diese Funktion z.B. für die oft besprochenen BB-Tags nutzen kann, erkläre ich am Ende des Tutorials in den Beispielen.

Modifier

Wie schon zu Beginn erwähnt, kann man an den abschließenden Delimiter sogenannte Modifier anhängen, die das gesamte Suchmuster betreffen. So kann man z.B. durch anhängen eine i dafür sorgen, dass die Suche unabhängig von Groß-/Kleinschreibung funktioniert, was z.B. für Suchfunktionen in Datenbanken oder auf Homepages sehr vorteilhaft ist.
Im folgenden eine Liste einiger Modifier und ihrer Funktion.

i
Wie schon erwähnt handelt es sich hierbei um den wohl meistgebrauchten Modifier, da er die Unterscheidung zwischen Groß- und Kleinschreibung deaktiviert.

s
Hängt man den s Modifier an, so interpretiert der Parser den als subject übergebenen Text als eine Zeile. Das heisst, unabhängig von diversen Newline-Metacharakteren (\n) wird der gesamte übergebene Text als eine "Zeile" behandelt. Das s kann man also für single-lined ansetzen.

m
Der m Modifier ist das genaue Gegenstück zum s Modifier und sorgt dafür, dass die übergebene Zeichenkette, als mehrzeilig (multiple-lines) interpretiert wird. Das heisst, dass der Metacharakter ^ jeweils auf den Anfang jeder neuen Zeile zutrifft. Neue Zeilen werden durch ein Newline (\n) eingeleitet.

Ein weiterer interessanter Modifier ist evtl. noch U. U sorgt dafür, dass die
Quantifier (siehe übernächster Abschnitt) nicht „gierig“ sind. Sollte man den Modifier nicht anhängen, so kann es schon mal sein, dass ein Quantifier mehr Zeichen der Zeichenkette betrachtet als eigentlich nötig, da der Parser probiert auf einen möglichst großen Text zu passen.

Ein Beispiel, das z.B. zu Problemen führen könnte:

Code:
$str = "[i ]Hier ist kursiv.[ /i]Hier wiederum nicht.[ i]Hier aber wohl wieder.[ /i]";
// Bitte Leerzeichen in den Italic Tags wegdenken.
Würde man versuchen, aus diesem String folgendes
Code:
<i>Hier ist kursiv.</i>Hier wiederum nicht.<i>Hier aber wohl wieder.</i>
zu machen, so kann es vorkommen, dass wenn man folgendes Muster benutzt
Code:
%\[i\](.*)\[/i\]%
Der * Quantifier gierig wird und uns bei entsprechendem Replacement folgendes ausspuckt:
Code:
<i>Hier ist kursiv.[/i]Hier wiederum nicht.[i]Hier aber wohl wieder</i>
Also wenn ihr vergleichbares realisieren wollt, dann sorgt dafür, dass eure Quantifier nicht gierig werden

Prinzipiell lassen sich Modifier beliebig durch Aneinanderhängen kombinieren. So wäre z.B. folgendes denkbar

/pattern/isU
Auf das Muster würden dann die Modifier i, s und U angewendet.

Metacharaktere

Metacharaktere stehe für bestimmte Teile einer Zeichenkette und erlauben ausserdem mehrere Möglichkeiten für ein Muster zuzulassen. Im folgenden eine Liste der gängisten Metacharaktere und direkt ein paar Beispiele, womit wir die ersten wirklichen Muster stricken.


.
Der Punkt steht für jedes beliebige Zeichen, ausser einem Zeilenumbruch. Wird jedoch der m Modifier angewand, so würde der Punkt auch auf diesen zutreffen.

Beispiel: /./

Dieses Pattern würde auf jede beliebige Zeichenkette passen, die an irgendeiner Stelle irgendein Zeichen hat. Sprich auf alle Zeichenketten, ausser auf eine leere.


^
Der Zirkumflex kennzeichnet den Anfang der Zeichenkette, womit wir auch noch mal näher auf den s und m Modifier eingehen können.

Beispiel: /^Hallo/

Dieses Pattern würde auf jede Zeichenkette zutreffen, die mit einem „Hallo“ beginnt. Hängt man jedoch den s Modifier an

Beispiel: /^Hallo/s

So würde das Muster nur noch zutreffen, wenn jede neue Zeile mit einem „Hallo“ beginnt.


$
Das Dollarzeichen ist das Gegenstück zum ^ und steht für das Ende der Zeichenkette.

Beispiel: /cu$/i

Dieses Pattern würde auf jede Zeichenkette passen, die ein cu, Cu, cU oder CU (wegen dem i Modifier) am Ende jeder Zeile hat. Am Ende jeder Zeile, da hier nicht explizit der m Modifier angegeben wurde. Im Gegensatz dazu würde ein

Beispiel: /cu$/im

auf jede Zeichenkette passen, die insgesamt mit einem cu, Cu, cU oder CU abschließt, und das unabhängig von eventuellen \n in der Zeichenkette.


|
Mit der vertikalen Strich markiert man Alternativen.

Beispiel: /Brief|Paket/

Dieses Muster trifft genau dann zu, wenn die Zeichenkette entweder „Brief“ oder „Paket“ ist.

Beispiel: /^Hallo|cu$/

Dieses Muster hingegen trifft auf alle Zeichenketten zu, die entweder mit „Hallo“ beginnen, oder mit cu aufhören. Hier kommt z.B. cU nicht in Frage, da kein i Modifier verwendet wurde.


()
Die Runden klammern dienen dazu bestimmte Bereiche des Patterns zu gruppieren. Durch die Tatsache, dass sich Klammern beliebig schachteln lassen, bilden sie ein mächtiges Werkzeug. Ausserdem sind sie für die Verwendung von Backreferences wichtig.

Beispiel: /(0,5|1|1,5)kg Paket/

Dieses Muster würde also auf die Zeichenketten „0,5kg Paket“, „1kg Paket“ sowie auf „1,5kg Paket“ passen.

Auch eine Kombination mit beliebigen anderen Metacharakteren ist denkbar, so würde z.B. folgendes Muster

Beispiel: /^(a|b)(x|y)$/

auf alle Zeichenketten passen, die ein a oder ein b am Anfang, sowie ein x oder y am Ende haben. Im konkreten Fall also ax, ay, bx und by.


[]
Die eckigen Klammern benötigt man bei der Verwendung von Charakterklassen, die im übernächsten Kapitel behandelt werden.


{}
Die geschweiften Klammern, werden genutzt, um Zeichenanzahlen anzugeben. Da diese in den Bereich der Quantifier fallen, werden sie im folgenden Kapitel behandelt.

Soll ein Zeichen, welches ein Metacharakter ist, nicht als solcher, sondern als normales Zeichen interpretiert werden, so muss er mit einem vorrangestellten Backslash \ escapet werden.

Ein Muster, dass auf alle Zeichenketten anspricht, die ein (test) anspricht müsste also wie folgt aussehen:

Beispiel: /\(test\)/

Nach diesem Kapitel Metacharaktere sollte auch klar sein, warum die Pattern oft so kryptisch und unverständlich aussehen. Man stelle sich mal ein Pattern mit Alternativen in zwei geschachtelten Ebenen vor, in dem dann noch mit escapeten Sonderzeichen gearbeitet wird
__________________
Die letzte Stimme, die man hört, bevor die Welt explodiert, wird die Stimme eines Experten sein, der sagt: 'Das ist technisch unmöglich!
Sir Peter Ustinov

Bewertung
 
Ausführlichkeit
100%100%100%
5,00
Verständlichkeit
97.6%97.6%97.6%
4,88
Kompetenz
97.6%97.6%97.6%
4,88
Gesamteindruck
98.8%98.8%98.8%
4,94
8 User bewerteten mit 99% durchschnittlich

Tutorial-Optionen
 

  #1 (permalink)  
Von Tim Comanns an 15.01.04, 13:48
Reguläre Ausdrücke - Teil 2

Quantifier

Quantifier erlauben für ein oder mehrere Zeichen die Angabe ein minimalen, maximalen oder exakten Anzahl dieser. Wird kein Quantifier angegeben, so wird davon ausgegangen, dass das Zeichen einmal vorhanden sein muss.

*
Der Stern steht für eine Anzahl von 0 oder mehr Zeichen
Beispiel: /.*/
Trifft auf jede beliebige Zeichenkette (auch auf leere) zu.

+
Das Pluszeichen steht für eine Anzahl von 1 oder mehr Zeichen
Beispiel: /a+/
Trifft auf jede Zeichenkette zu, die mindestens ein a enthält.

?
Das Fragezeichen steht für eine Anzahl von 0 oder exakt 1
Beispiel: /^(test)?$/
Steht für die Zeichenkette „test“ und nur für diese. Auf Grund des ? und der Einschränkung durch ^ und $ ist z.B. „testtest“ nicht denkbar.

{n}
Steht für genau n Zeichen.
Beispiel: /a{3}/
Steht für exakt drei a hintereinander.

{n,}
Steht für mindestens n Zeichen.
Beispiel: /a{1,}/
Steht für mindestens ein a und ist somit gleichbedeutend mit /a/ und /a+/

{n,m}
Steht für mindestens n, aber maximal m Zeichen.
Beispiel: /a{1,3}/
Steht für alle Zeichenketten, die 1, 2 oder 3 a’s hintereinander enthalten.

Charakterklassen

Eine Charakterklasse gibt eine Auswahl von erlaubten Zeichen an.

Beispiel: /^a[xy]$/

Dies trifft auf ax und ay zu. Zwar könnte man hier auch noch ohne weiteres mit einer normalen runden Klammer und einem | agieren, im folgenden Beispiel wird es allerdings evtl. schon deutlicher, wo der Vorteil von Charakterklassen liegt.

Beispiel: /^a[0-9]$/

Dieses Muster passt auf a0, a1, a2, ..., a9 und damit sollte der Vorteil von Charakterklassen endgültig klar sein.
Gleichzeitig haben wir hier eines von zwei Sonderzeichen in einer Charakterklasse kennengelernt, nämlich den Bindestrich - . Der Bindestrich gibt, wie man es sich auch logischerweise denken könnte eine Reichweite an.

Beispiel: /^[a-zA-Z]+$/

Dieses Pattern trifft also auf alle Zeichenketten aus Buchstaben zu, jedoch dürfen keine Zahlen enthalten sein. Wollte man das ganze um Zahlen erweitern, so müsste man

[a-zA-Z0-9]

nutzen. Wenn man nun noch bestimmte Sonderzeichen hinzufügen kann, so kann man diese einfach zusätzlich hineinschreiben.

[0-9+-*\/]

Würde also auf alle Zeichen eines einfachen Taschenrechners ansprechen.
Dabei muss der / durch einen vorrangestellten \ maskiert werden, sofern ihr den / als Pattern-Delimiter nutzt.

Das zweite Sonderzeichen in Charakterklassen ist der Zirkumflex ( ^ ). Dies ist wiederum ein etwas verwirrender Punkt, da der Zirkumflex ja eigentlich den Beginn der Zeichenkette markiert. In einer Charakterklasse hat ^ allerdings eine negierende (verneinende) Aufgabe.

Beispiel: /^a[^bc]$/

Dieses Muster triff auf alle Zeichenketten zu, die ein a Anfang haben, ausser ab und ac.

Backreferences

Backreferences sind, wie die Übersetzung schon sagt, Rückbezüge. Und zwar sind es Rückbezüge, die sich auf einen vorangegangenen Teil des Patterns (in runden Klammern) bezieht und den Inhalt dieser (Klammer) enthält. Dazu gibt es generell zwei verschiedene Arten der Syntax. Die neuere davon ist $n, die ältere \\n, wobei n für die n-te Klammerngruppe steht.
Beispiel: !(&lt;b&gt;|&lt;i&gt;>)(.*?)(&lt;/$1&gt;)!

Dieses Muster trifft also auf &lt;b&gt;test&lt;/b&gt; aber auch &lt;i&gt;test&lt;/i&gt;, nicht aber auf &lt;b&gt;test&lt;/i&gt; zu.

Wirklichen Sinn machen die Backreferences aber eher bei der Verwendung von preg_replace().

Beispiel:
PHP-Code:
$str preg_replace("!-start-(.*?)-end-!","<anfang>$1</ende>",$str
Dieses Konstrukt würde uns also aus einer Zeichenkette -start-trullala-end- folgendes machen: <anfang>trullala</ende>.

Und weil praktische Beispiele immer am besten dazu dienen sich eine Sache klarzumachen, checken wir im folgenden Beispiel ob eine eingegebene Handynummer ein korrektes Format hat.

Dazu macht man sich zunächst Gedanken über die grundlegende Struktur einer Handy Nummer.

- Sie beginnt stets mit 01
- Auf die 01 folgt (zum momentanen Zeitpunkt) eine 6 oder 7
- Danach folgt eine beliebige Zahl
- Dann folgt, je nachdem wie ihr es wollt ein Trennzeichen, ich werde auf einen / testen
- Danach folgen sieben beliebige Zahlen (falls das nicht der Norm entspricht, denkt euch halt das entsprechende Richtige)

Beispiel:
PHP-Code:
$pattern "/^(01)(6|7)([0-9])\\/([0-9]{7})$/"
Kurz zur Erläuterung. Die einzelnen Segmente sind geklammert, damit man sie später über den Backreference ansprechen kann.
Wie wir sehen, beginnt das Muster, auf das wir testen, mit 01. Gefolgt von einer 6 oder 7, was wir durch (6|7) ausdrücken. Danach folgt eine beliebige Zahl. Wir drücken dies einfach durch die Charakterklasse [0-9] aus. Den Quantifier können wir uns sparen, da ja nur ein Zeichen vorhanden sein muss.
Danach folgt ein /, den wir allerdings mit einem vorangestellten \ escapen müssen, da er sonst als Delimiter gelten würde.
Danach folgen genau sieben Zeichen aus der Charakterklasse [0-9].

Gehen wir mal davon aus, dass uns eine Usereingabe der Handynummer in der Variable $_POST[’handy’] vorliegt, dann würden wir z.B. folgenden Code nutzen.
PHP-Code:
$pattern "/^(01)(6|7)([0-9])\/([0-9]{7})$/";
if(
preg_match($pattern$_POST['handy'])) {
  echo 
"gültige Handynummer";
}
else {
  echo 
"Die eingegebene Nummer entspricht nicht dem gültigen Format.";

Ich hoffe, ich habe euch einen kleinen Einblick in die Welt der Regular Expressions geben können.
Bei Anregungen und Verbesserungen zu diesem Tutorial, schreibt mir einfach eine PN oder E-Mail.

Ergänzung von Nils Hitze:
Noch ein paar Links zum Thema reguläre Ausdrücke :[list=1][*] http://www.regular-expressions.info/tutorial.html[*] http://weitz.de/regex-coach[/list=1]
 
 
Lesezeichen:


Tutorial-Optionen
Ansicht
LinkBacks (?)
 
Erstellt von Für Typ Datum
PHP Regular Expressions | Digitaler Fundus Dieses Thema Pingback 25.11.08 16:05
JohnnyFirpo's regexp Bookmarks on Delicious Dieses Thema Refback 17.10.08 11:44
groundcontrol's regex Bookmarks on Delicious Dieses Thema Refback 23.09.08 15:12
arndttouby's Network on Delicious Dieses Thema Refback 11.09.08 07:58
Hat das (.*?) irgendeine Bedeutung in PHP Dieses Thema Refback 27.08.08 11:16
Background-image auslesen - Forum: phpforum.de Dieses Thema Refback 19.08.08 11:14
Background-image auslesen - Forum: phpforum.de Dieses Thema Refback 19.08.08 10:33
Background-image auslesen - Forum: phpforum.de Dieses Thema Refback 19.08.08 10:21
String prüfen - Forum: phpforum.de Dieses Thema Refback 30.07.08 15:41
Kamel:Kameloid/dpl - Kamelopedia Dieses Thema Refback 07.07.08 15:39
MC Dieses Thema Refback 11.06.08 14:59
Erledigt: (Regex) Zeichenlänge-Limit PHP Web-Entwicklung Forum Supertopic Dieses Thema Refback 08.06.08 19:41
Mailattacke / JoeJob-Attacke (also explanations in english) - Trekkingforum.com Dieses Thema Refback 20.05.08 17:49
Links filtern mit regulären Ausdrücken - Forum: phpforum.de Dieses Thema Refback 21.04.08 16:14
Computerforum | PHP | Nur gewisse Zeichen mithilfe regulärer Ausdrücke erlauben Dieses Thema Refback 28.03.08 17:25
bytezh's bookmarks on del.icio.us Dieses Thema Refback 29.01.08 18:34
Hat das (.*?) irgendeine Bedeutung in PHP Dieses Thema Refback 25.01.08 09:50
Hat das (.*?) irgendeine Bedeutung in PHP Dieses Thema Refback 24.01.08 19:01
Hat das (.*?) irgendeine Bedeutung in PHP Dieses Thema Refback 24.01.08 19:01
Hat das (.*?) irgendeine Bedeutung in PHP Dieses Thema Refback 21.01.08 09:32
Metacrawler - Die Metasuchmaschine. Dieses Thema Refback 09.01.08 12:09
Erledigt: (Regex) Zeichenlänge-Limit » PHP » Web-Entwicklung » Supertopic.de Dieses Thema Refback 07.01.08 10:52
Kontaktformular - Seite 3 - html.de Forum - HTML für Anfänger & Fortgeschrittene Dieses Thema Refback 29.11.07 20:23
[quote] BBcode - html.de Forum - HTML für Anfänger & Fortgeschrittene Dieses Thema Refback 18.11.07 19:33
howto ubuntu » 2007» Oktober Dieses Thema Refback 07.11.07 16:48
howto ubuntu » Blog Archi » regular expressions Dieses Thema Pingback 23.10.07 10:24
PHP Tutorials Dieses Thema Refback 13.10.07 22:38
PHP Tutorials Dieses Thema Refback 15.09.07 00:39
PHP Tutorials Dieses Thema Refback 10.09.07 18:47
Sätze auslesen (Google) [WMB] Dieses Thema Refback 10.09.07 18:41
Sätze auslesen (Google) [WMB] Dieses Thema Refback 08.09.07 20:59
.. Kilu.de :: Community .. :: preg_replace & reguläre Ausdrücke Dieses Thema Refback 01.09.07 15:34
webworker34's bookmarks on del.icio.us Dieses Thema Refback 22.08.07 19:26
Regulärer Ausdruck - Developer's Guide Dieses Thema Refback 19.08.07 20:27
Apache Forum :: View topic - Preg_match_all -> kleine Erläuterung Dieses Thema Refback 10.07.07 10:17
derpeppy's bookmarks tagged with Dieses Thema Refback 01.07.07 10:41
groundcontrol's bookmarks on del.icio.us Dieses Thema Refback 15.06.07 11:07
Apache Forum :: Thema anzeigen - Preg_match_all -> kleine Erläuterung Dieses Thema Refback 31.05.07 08:32
regex - html.de Forum - HTML für Anfänger & Fortgeschrittene Dieses Thema Refback 27.05.07 21:58
[regex] Zeichenlänge-Limit (Regex, Tutorial) Dieses Thema Refback 27.02.07 21:01
derpeppy's bookmarks on del.icio.us Dieses Thema Refback 18.01.07 20:18

Ähnliche Themen
 
Tutorial Autor Forum Kommentare Letzter Beitrag
Regular Expressions aeiber PHP 0 07.04.07 02:28
Regular Expressions Drizztd Swing, Java2D/3D, SWT, JFace 3 03.01.07 15:26
Regular Expressions dennislassiter PHP 1 21.05.06 16:11
Regular Expressions HonkyDonky Javascript & Ajax 1 13.04.04 18:54
» Tools
 
tutorials.de-Tools tutorial.de-Suchfeld tutorial.de-Widget tutorial.de-RSS-Feed tutorial.de-Banner
» Neue Links
 
Hits: 101
»
JHT's Planetary...
(Cinema 4D-Objekte)
Hits: 224
»
Tageslicht ohne GI
(Cinema 4D-Tutorials)
Hits: 114
»
Puzzle
(Cinema 4D-Tutorials)
Hits: 83
»
Lacreme
(Cinema 4D-Tutorials)
Hits: 163
»
Liquid Light
(Cinema 4D-Tutorials)
» Aktuelle Umfrage
 
Bist du mit der Geschwindigkeit der Tutorials.de-Website zufrieden?
Ja, es putzt mir glatt den Staub vom Bildschirm! - 75,00%
60 Stimmen
Nein, ich denke da muss noch nachgebessert werden... - 25,00%
20 Stimmen
Stimmen gesamt: 80
Du darfst bei dieser Umfrage nicht abstimmen.

 

Alle Zeitangaben in WEZ +1. Es ist jetzt 13:03 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch) & vBadvanced CMPS v.3.2.0
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.3.0 ©2009, Crawlability, Inc.
Alle Rechte vorbehalten ©2000 - 2010 tutorials.de
Design by Mark, CSS by Maik & Sven Mintel
Seite generiert in 0,22276 Sekunden mit 32 queries