2012-04-03 17 views
0

Ich brauche einen Ausdruck für PHP preg_replace, also ersetzen Sie einfach "[" und "]" durch "(" und ")" nur für keine PHP-Arrays. Bitte lesen Sie die Frage und sehen Sie sorgfältig die Probe ...php preg_replace Ausdruck

Danke ...

Probe:

// input 
$foo[]; 
bar["name"]; 

// output 
$foo[]; 
bar("name"); 

Antwort

0

Ich weiß nicht, was "nur für keine PHP Arrays" bedeutet, aber wenn Sie nur einzelne Zeichen ersetzen, warum ein Preg verwenden? str_replace() sollte gut funktionieren.

[[email protected] ~]$ cat doit 
#!/usr/local/bin/php 
<?php 

$text="a[b]c\n"; 

$in = array("[", "]"); 
$out = array("(", ")"); 

print str_replace($in, $out, $text); 

[[email protected] ~]$ ./doit 
a(b)c 
[[email protected] ~]$ 
+0

Dies wird auch die $ foo in OP Frage –

+0

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

0
preg_replace(array("/\[/", "/\]/"),array("(", ")"), $content); 

Das ist die einfachste Sie tun können, ersetzen [mit (und] mit). Es sei denn, du bist nach etwas etwas komplexer?

+0

Bitte lesen Sie die Frage und sehen Sie die Probe sorgfältig ... –

+0

Ihre Frage ist überhaupt nicht klar – DdD

0

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 ^^)

0

Ich bin bei regulären Ausdrücken nicht groß, so in Pseudo-Code, was Sie brauchen, um Pickup ist:

[whitespace] then [Any alpha numeric] then [square brace] then [double quote] then [record the value] 
then [double quote] then [square brace]