Dies tun sollte (der schwierige Teil ist Variablen von anderen Sachen zu unterscheiden):
^(.*[,;\?:/"'\(\)\[\]-+={}#@*^ ~&!%]+)*\[([^\]]*)\](.*)
| 1 |2| 3 |4| 5|
(before)[(inside)](after)
1: stellt sicher, dass es
2 kein PHP-Variable ist: die öffnende Klammer
3 : was ist in den Klammern (es könnte ein Problem sein, wenn es verschachtelte Klammern, wie wenn Sie mustMatch[$mustNotMatch[somekey]]
tun, werden Sie wahrscheinlich am Ende mit mustMatch($mustNotMatch[somekey)]
, die ist seltsam und kann wahrscheinlich behandelt werden, wenn Sie müssen)
4: die Schließbügel
5: was auch immer nach den Klammern ist
So sollte diese (nicht getestet ^^) in den folgenden Fällen mit dem Muster übereinstimmen:
bar[] > bar()
bar[foo] > bar(foo)
a+bar["foo"] > a+bar("foo")
@foo[bar] > @foo(bar)
a+$foo[bar[foo]]*bar[foo] > a+$foo[bar(foo)]*bar(foo)
this is a $foo[bar] with a [bar] > this is a $foo[bar] with a (bar)
Und es sollte nicht in den folgenden Fällen entsprechen:
$foo[]
$foo[bar]
a-$foo[bar]
@$foo[bar]
hoffe, das hilft (und funktioniert ^^)
Dies wird auch die $ foo in OP Frage –
Die Frage ersetzen, ist nicht klar; ist '$ foo []' die Variable, die das zu ersetzende Material enthält, oder etwas, das von der Übersetzung ausgenommen werden sollte? Ich sehe, wie du es interpretierst, aber bessere Klarheit wäre ... besser. – ghoti