正则表达式 - 防止两个字符相邻

时间:2013-08-08 09:57:20

标签: php regex eclipse

我需要用<?=[something]?>替换所有类似<?php echo [something]; ?>的PHP行:\<\?\=([a-zA-Z0-9()=#<>\[\]\\/'"._$\?:, \-]*)([;]*)\?\>问题是某些子句中几乎可以有任何内容,甚至&lt; 但它们不能相邻。我对正则表达式有点新,并写了这个非常混乱的表达式:<?php echo \1; ?>并将其替换为<?=[something]?><tr><td><?=[something]?>

它有效,但它不能匹配这样的东西:

{{1}}当它在一行中时。它完全匹配整条线。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

此代码应该有效:

$s = '<?=[something]?><tr><td><?=[something]?>';
$s = preg_replace('/(<\?)=\s*(\[[^]]*\])\s*(\?>)/', '$1php echo $2; $3', $s);
var_dump($s);

<强>输出:

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