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

时间:2014-03-12 03:09:10

标签: php regex

我有这个字符串:

use A\B\C;
use A\B\C;

var $foo;
/*
* comment
*/

use D\E\F;

Class Foo {

如何替换以use开头的最后一个字符串。在上面的示例中必须是“使用D \ E \ F;”结果。

我找到了许多方法,但没有运气。包括前瞻阴性(?!),但很困惑如何使用它。所以我现在可以得到“use(。*);”但是这被替换了所有匹配的字符串。

感谢。

1 个答案:

答案 0 :(得分:1)

您可以将此正则表达式与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找到untile新行
  • (?!.*?use)是一个否定前瞻,只有在没有其他use
  • 的情况下才会匹配以前的正则表达式