Hi,
Da das Fragezeichen in regulaeren Ausdruecken Sonderbedeutung hat, muss es durch einen vorangestellten Backslash maskiert werden, wenn es eben die nicht haben, sondern nur ein "normales" ? sein soll.
Ich bin davon ausgegangen, das alles, was in einfachen Klammern ' steht, keine Maskierung benötigt.
Vorsicht, hier wirfst du zwei verschiedene Kontexte durcheinander!
Zum einen haben wir da mal den Kontext "PHP", in dem in Strings bestimmte Zeichen maskiert werden muessen - bspw. die Hochkommata oder Anfuehrungszeichen, mit denen der String als ganze eingeschlossen werden soll, oder auch der Backslash selber, wenn dieser sich an einer Stelle befindet, wo er als Maskierungssymbol verstanden werden koennte, aber nicht soll (bspw. in einem mit doppelten Anfuehrungszeichen eingefassten String, in dem \n als *Text* drinstehen soll - \n waere aber ein Zeilenumbruch, also \n stattdessen).
Und dann haben wir da noch den Kontext "Regulaerer Ausdruck" - in *dem* hat das Fragezeichen eine Sonderbedeutung (bspw. als "Quantifier") - also muessen wir das Fragezeichen, dass diese Sonderbedeutung hier nicht haben soll, maskieren - aber nicht "fuer" PHP, sondern fuer unseren regulaeren Ausdruck.
Ich werd mich gleich mal ans googlen machen, was denn noch alles eine Maskierung benötigt.
http://www.php.net/manual/en/language.types.string.php
http://www.php.net/manual/en/reference.pcre.pattern.syntax.php, Abschnitt "Meta-characters"
<? echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>Da fällt mir auf, an dieser stelle gibt es keine Probleme mit den ?, warum das?
*Generell* gibt es da keins, weil der Kontext hier wieder "nur" PHP ist - und dem sind Fragezeichen in Strings normalerweise ziemlich wurscht.
Mit einer Ausnahme:
Wenn die Option short_open_tags auf on stuende (sollte sie nicht, weil man nicht auf jedem Server davon ausgehen kann), dann koennte man PHP-Parserbereiche statt mit <?php ... ?> auch mit <? ... ?> einschliessen - kommt dann aber eben u.a. mit dem XML-Prolog oder aehnlichen Konstrukten in Schwierigkeiten.
MfG ChrisB