PHP正则表达式:删除最后一次出现的字符串和字符串之间的所有内容

时间:2013-07-28 05:50:11

标签: php regex string preg-replace

在文字中,我想删除最后一次出现的<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.

3 个答案:

答案 0 :(得分: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>)查找上一个<br>

答案 1 :(得分:1)

$modified_text = preg_replace('/^(.*)<br>(.*)$/s', '$1', $original_text);

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

答案 2 :(得分:0)

你可以这样做:

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

感兴趣的:

  • 很少回溯
  • 很少前瞻测试(仅当找到<u时)
  • dotall模式无用