在Notepad ++中使用正则表达式查找/替换

时间:2011-07-30 20:00:07

标签: regex notepad++

我想将所有的php短标签替换为完整的短标签。

示例源文本:

<a href="<?=$baseurl?>random/<?php echo $offset+$per_page; ?>" class="arrows right" <?php echo $displayright; ?>></a>

预期的最终结果:

<a href="<?php echo $baseurl; ?>random/<?php echo $offset+$per_page; ?>" class="arrows right" <?php echo $displayright; ?>></a>

我得到了这个:

找到:<?=(.*)?>

替换为:<?php echo \1; ?>

但结果是:

<a href="<?php echo $baseurl?>random/<?php echo $offset+$per_page; ?>" class="arrows right" <?php echo $displayright; ; ?>></a>

因此,当一行上有多个php开始和结束标记时,它确实不起作用。

我该如何解决这个问题?谢谢!

4 个答案:

答案 0 :(得分:1)

是的,因为*运营商贪婪,并会尝试匹配最终?的所有内容。您可以通过匹配结束标记中的?以外的所有内容来解决此问题:

找到:<?=([^?]*)?>

替换为:<?php echo \1; ?>

答案 1 :(得分:1)

将其放入搜索字段:

<\?=([^?]+)\?>

这在替换领域:

<?php echo \1; ?>

答案 2 :(得分:0)

当你使用*时,Notepad ++会尽可能地匹配,所以你需要告诉它你不想匹配的东西,所以它停止而不是找到整行:

查找:<?=([^?]*)?>

替换:<?php echo \1; ?>

答案 3 :(得分:0)

在你的正则表达式中使用*使它“贪婪”,你不希望这样。你想要第一次出现?&gt;匹配而不是最后一个。还有,?正则字符在正则表达式中是特殊的,因此您也需要将其转义:

<\?=([^?]+)\?>