Php regex-防止两个字符相邻

Php regex-防止两个字符相邻,php,regex,eclipse,Php,Regex,Eclipse,我需要将所有类似于的PHP行替换为:问题是,在某个子句中几乎可以有任何内容,甚至?和此代码应该可以工作: $s = '<?=[something]?><tr><td><?=[something]?>'; $s = preg_replace('/(<\?)=\s*(\[[^]]*\])\s*(\?>)/', '$1php echo $2; $3', $s); var_dump($s); $s=''; $s=预替换(“/()/”,“$1H

我需要将所有类似于
的PHP行替换为:
问题是,在某个子句中几乎可以有任何内容,甚至此代码应该可以工作:

$s = '<?=[something]?><tr><td><?=[something]?>';
$s = preg_replace('/(<\?)=\s*(\[[^]]*\])\s*(\?>)/', '$1php echo $2; $3', $s);
var_dump($s);
$s='';
$s=预替换(“/()/”,“$1HP echo$2;$3',$s”);
var_dump($s);
输出:

string(56) "<?php echo [something]; ?><tr><td><?php echo [something]; ?>"
string(56)”
此代码应适用于:

$s = '<?=[something]?><tr><td><?=[something]?>';
$s = preg_replace('/(<\?)=\s*(\[[^]]*\])\s*(\?>)/', '$1php echo $2; $3', $s);
var_dump($s);
$s='';
$s=预替换(“/()/”,“$1HP echo$2;$3',$s”);
var_dump($s);
输出:

string(56) "<?php echo [something]; ?><tr><td><?php echo [something]; ?>"
string(56)”

为什么需要这样做?你为什么不改变一下
,你应该试着用不情愿的量词而不是贪婪的量词。贪婪量词将尽可能多地匹配,以满足要匹配的整个模式。试着把你的角色类中的
*
量词改成
*?
。你把事情弄得很复杂,只需要从
@进行全局搜索/替换Gordon是的,我想到了,但是我的老板对事情要求很严格,当前的代码非常混乱,如果我按照你说的进行替换,有些行的结尾将没有分号。为什么需要这样做?你为什么不改变一下
,你应该试着用不情愿的量词而不是贪婪的量词。贪婪量词将尽可能多地匹配,以满足要匹配的整个模式。试着把你的角色类中的
*
量词改成
*?
。你把事情弄得很复杂,只需要从
@进行全局搜索/替换Gordon是的,我想到了,但是我的老板对事情要求很严格,当前的代码非常混乱,如果我按照你说的进行替换,有些行的结尾将没有分号。