0

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

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 />

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

我试过了

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

但不炒锅。编译器抛出错误。

请问我能做什么?

4

2 回答 2

5

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

<br \/>(?!.*<br \/>)
于 2012-10-15T19:55:25.897 回答
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

您可能还需要考虑“<BR>”或“<br />”(多个空格)。

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 操作也可以解决问题:

$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";
}
于 2012-10-15T20:40:01.867 回答