仅用preg Replace php替换最后匹配的字符串


Replace only the last matched string with preg replace php

我有这个字符串:

use A'B'C;
use A'B'C;
var $foo;
/*
* comment
*/
use D'E'F;
Class Foo {

如何替换最后一个以use开头的字符串。在上面的例子中,必须是"use D'E'F;"作为结果。

我已经找到了很多方法,但是没有运气。包括前瞻性否定(?!),但不知道如何使用它。这就是我现在能得到的" use(.*);

谢谢。

您可以将此正则表达式与s开关(DOTALL)一起使用:

'/use [^'n]*(?!.*?use)/s'

在线演示:http://regex101.com/r/dX9hQ9

代码:

$re = '/use [^'n]*(?!.*?use)/s'; 
$str = 'use A'B'C;
use A'B'C;
var $foo;
/*
* comment
*/
use D'E'F;
Class Foo {'; 
preg_match($re, $str, $matches);

解释:

  • s修饰符使点匹配新行
  • use [^'n]*匹配文本use,直到找到新行
  • (?!.*?use)是一个负向前看,它匹配之前的正则表达式,只有当它没有被另一个use