我有这个字符串:
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