2012-07-11 155 views
2

我正在尋找一個正則表達式,它可以用「 - >」替換所有的「[」,但只有當它沒有後跟「]」時。正則表達式替換[有 - >取決於條件

,並在同一時間什麼也沒有取代所有的「]」,但只有當他們沒有旁邊的「[」

所以在其他單詞「test [喜] []」將成爲「測試 - >喜[]」

謝謝;)

我真的不知道該怎麼做;)

回答

4

我所做的假設是,括號之間存在什麼樣的如下PHP variable naming conventions(即字母,數字,下劃線)並且您的代碼有效(例如,否$test['five])。

echo preg_replace('/\[[\'"]?(\w+)[\'"]?\]/', '->\1', $input); 

這應該處理:

test[one] 
test['two'] 
test["three"] 

但不是:

test[$four] 
+0

我不認爲他需要匹配引號。 – Florent 2012-07-11 14:11:46

+0

@Florent,爲未來的讀者提供更強大的功能。 – 2012-07-11 14:14:20

+0

謝謝,它的工作...需要等待一分鐘或2分鐘,我會將此答案視爲已接受;) – Hipny 2012-07-11 14:17:16

0

這應該做的。它採用

\[  # match a [ 
(  # match group 
[^\]]+ # match everything but a ] one or more times 
)  # close match group 
\]  # match ] 

匹配括號

$replaced = preg_replace("/\[([^\]]+)\]/", "->$1", $string); 
0

之間的任何東西代替這個表達式\[(\w+)\]-> +比賽組1

4

沒有正則表達式的需要!

strtr($str, array('[]'=>'[]','['=>'->',']'=>'')) 




$ cat 1.php 
<?php 
echo strtr('[hi][]', array('[]'=>'[]','['=>'->',']'=>'')); 
$ php 1.php 
->hi[] 
+2

+1,因爲沒有使用正則表達式。但應該指出的是,這隻適用於這種特定格式(即'arr [key]')。如果你有不同的*鍵*,你可能需要擁抱正則表達式。 – 2012-07-11 14:21:08

+0

如果沒有它可以解決任務,請勿使用正則表達式。做得好! – gaussblurinc 2012-07-11 14:57:17