仅替换字符串中最后一次出现的<br/>

时间:2012-10-15 19:53:33

标签: regex preg-replace replace

这是一个示例内容(西班牙语)

Definición<br /> Elementos del fuego<br /> Clases de fuego, ¿Cómo evitar que comiencen las clases de fuego?<br /> Métodos de extinción<br /> Tipos de extintores portátiles<br /> Forma de usar los extintores portátiles<br /> Protección pasiva para el control de incendios, tipos de componentes.<br /> Procedimientos preventivos en caso de incendios en minería<br />

我想使用php <br />删除最后preg_replace()次出现。

我试过

preg_replace('/<br \/>$/', '<br class="last" />', $content);

但是没有吃饭。编译器出错了。

我能做些什么?

2 个答案:

答案 0 :(得分:5)

使用带有否定前瞻(?!...)的正则表达式模式,例如

<br \/>(?!.*<br \/>)

答案 1 :(得分:1)

请注意,在使用正则表达式时使用正则表达式:

$text = "foo bar <br /> \nbaz <br /> <br /> mu";

echo preg_replace('/<br \/>(?!.*<br \/>)/', '<br class="last" />', $text) . "\n";

将导致两个<br />被替换,因为.(点)元字符与换行符不匹配。所以上面会打印出来:

foo bar <br class="last" /> 
baz <br /> <br class="last" /> mu

您可能还想考虑“&lt; BR&gt;”或“&lt; br /&gt;” (不止一个空间)。

echo preg_replace('#<br\s*/?>(?!.*<br\s*/?>)#is', '<br class="last" />', $text) . "\n";

i使模式不区分大小写,s允许.匹配换行符

将打印:

foo bar <br /> 
baz <br /> <br class="last" /> mu

如果您确定总是看起来像<br />,那么一些str-operations也可以做到这一点:

$text = "foo bar <br /> \nbaz <br /> <br /> mu";
$needle = "<br />";
$index = strrpos($text, $needle);

if($index) {
  echo substr_replace($text, '<br class="last" />', $index, strlen($needle)) . "\n";
}