正则表达式替换[与 - >;视情况而定

时间:2012-07-11 14:05:53

标签: php regex

我正在寻找可以用“ - >”替换所有“[”的正则表达式但只有当它没有跟在“]”之后。

并同时更换所有“]”,但只有当它们不在“[”

旁边时

所以换句话说“test [hi] []”将成为“test-> hi []”

谢谢;)

我真的不知道怎么做;)

4 个答案:

答案 0 :(得分:4)

我假设括号之间存在PHP variable naming conventions(即字母,数字,下划线),并且您的代码有效(例如没有$test['five])。

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

这应该处理:

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

但不是:

test[$four]

答案 1 :(得分:4)

不需要regexp!

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




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

答案 2 :(得分:0)

这应该做。它使用

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

匹配括号内的任何内容

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

答案 3 :(得分:0)

将此正则表达式\[(\w+)\]替换为-> +匹配组1