0

在文本中,我想删除最后一次出现的<br>字符串和字符串之间的所有内容。

假设我有这段文字:

Lorem ipsum dolor sit amet, <br> 
consectetur adipisicing elit, <br> 
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. <br> 
Some text I want to remove because it is useless.

我想删除最后一个<br>和“无用”之间的所有内容。(包括分隔符)。

预期的结果是:

Lorem ipsum dolor sit amet, <br> 
consectetur adipisicing elit, <br> 
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
4

3 回答 3

1
$text = <<< EOD
Lorem ipsum dolor sit amet, <br>
consectetur adipisicing elit, <br>
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. <br>
Some text I want to remove because it is useless.
EOD;

echo(preg_replace('/(?s)<br>(?!.*<br>).*useless/', '', $text));

上面的代码打印:

Lorem ipsum dolor sit amet, <br>
consectetur adipisicing elit, <br>
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. .

使用负前瞻查找(?!.*<br>)查找 last <br>

于 2013-07-28T06:02:47.010 回答
1
$modified_text = preg_replace('/^(.*)<br>(.*)$/s', '$1', $original_text);

这应该创建一个modified_text变量,其中包含直到最后一个<br>in的所有内容original_text

于 2013-07-28T06:27:39.687 回答
0

你可以这样做:

$txt = preg_replace('~<br>(?>[^<u]++|<(?!br>)|u(?!seless))*(?>useless\.?|$)~', '', $txt);

兴趣:

  • 很少的回溯
  • 一些前瞻测试(仅当找到 a<或 an时u
  • dotall模式没用
于 2013-07-28T11:37:24.263 回答