2

我正在寻找一个可以用“->”替换所有“[”的正则表达式,但前提是它后面没有“]”。

并同时将所有“]”替换为空,但仅当它们不在“[”旁边时

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

谢谢 ;)

我真的不知道该怎么做;)

4

4 回答 4

4

我已经假设括号之间存在的内容遵循PHP 变量命名约定(即字母、数字、下划线)并且您的代码是有效的(例如 no $test['five])。

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

这应该处理:

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

但不是:

test[$four]
于 2012-07-11T14:09:10.097 回答
4

不需要正则表达式!

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




$ cat 1.php
<?php
echo strtr('[hi][]', array('[]'=>'[]','['=>'->',']'=>''));
$ php 1.php
->hi[]
于 2012-07-11T14:16:03.067 回答
0

这应该做。它用

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

匹配括号之间的任何内容

$replaced = preg_replace("/\[([^\]]+)\]/", "->$1", $string);
于 2012-07-11T14:09:33.580 回答
0

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

于 2012-07-11T14:09:34.743 回答