正则表达式:除了给定的短语之外

时间:2013-01-01 22:44:53

标签: php regex

[tag]blabla[/tag]

我想将其替换为:

<tag>blabla</tag>

但如果[tag][/tag]之间有一个短语“leavemealone”,请保持不变。

因此[tag]leavemealone[/tag][tag]aaa leavemealone[/tag][tag]aaa leavemealone aaa[/tag]等应保持不变。

代码:

preg_replace("#\[tag\](what_should_be_here)\[\/tag\]#", "<tag>$1</tag>", $text);

1 个答案:

答案 0 :(得分:4)

使用以下模式。

$match = "#\[(\w+)\](?!.*leavemealone.*)(.*?)\[/(\w+)\]#";
$replace = "<$1>$2</$3>";

那应该这样做。如果您不想匹配任何代码,只需匹配“tag”代码,则可以像这样修复:

$match = "#\[tag\](?!.*leavemealone.*)(.*?)\[/tag\]#";
$replace = "<tag>$1</tag>";