PHP:如何删除字符串中某些关键字之前的所有内容?

PHP:如何删除字符串中某些关键字之前的所有内容?,php,regex,preg-replace,strstr,php-5.4,Php,Regex,Preg Replace,Strstr,Php 5.4,我有一个循环函数的结果 C:/wamp/www/xxx/core/page/ C:/wamp/www/xxx/local/page/ 但是在核心或本地之前,我如何修剪任何东西,所以我只能得到这些 core/page/ local/page/ 我使用strstr,但我认为它只搜索一个固定的关键字,我有两个,更多的关键字要匹配 $string = 'C:/wamp/www/xxx/local/page/'; $output = strstr($string, '(local|core)'); v

我有一个循环函数的结果

C:/wamp/www/xxx/core/page/
C:/wamp/www/xxx/local/page/
但是在核心本地之前,我如何修剪任何东西,所以我只能得到这些

core/page/
local/page/
我使用strstr,但我认为它只搜索一个固定的关键字,我有两个,更多的关键字要匹配

$string = 'C:/wamp/www/xxx/local/page/';
$output = strstr($string, '(local|core)');
var_dump($output);
我尝试了
preg\u replace

var_dump(preg_replace('#/(core|local)/.*#si', '/', $string));

它给了我前面的部分-
C:/wamp/www/xxx/
您的代码如下:

$sData   = 'C:/wamp/www/xxx/local/page/';
$sResult = preg_replace('/^(.*?)\/(core|local)\/(.*?)$/', '$2/$3', $sData); 

您可以像这样使用
preg\u replace

$output = preg_replace('~^.*?((?:core|local).*$)~i', "$1", $string);

如果要严格匹配到文件夹
核心
本地
,可以使用以下选项:

$output = preg_replace('~^.*?/(?=(?:core|local)/)~i', '', $string);


关于你的问题:

var_dump(preg_replace('#/(core|local)/.*#si', '/', $string));
这将匹配
/(core | local)/.
,并将其替换为
/
,这并不是您真正想要的,因为您实际上必须匹配之前的内容。这里我的第一个正则表达式就是这样一个例子:它将匹配
(?:core | local)
之前的所有内容,然后将之后的所有内容捕获到一个捕获组中,我在使用backreference
$1
时会提到这个组

因为votewar要来这里。。。我在匹配中添加了前斜杠,如果您根本不使用捕获组(而是使用前瞻),那么您将使用更少的内存,因此我使用了最后一个正则表达式。

使用()


如果字符串的第一位始终相同,则可以使用

echo ltrim($dir,“C:/wamp/www/xxx/”)

您可以使用str\u replace以不同的方式执行此操作。检查下面

$string = 'C:/wamp/www/xxx/local/page/';
$output = str_replace('C:/wamp/www/xxx/' , '' , $string);
var_dump($output);

它只需修剪左边的字符串。

使用反向引用看起来更好,谢谢,我忘了它们,这不会太复杂。事实上,这是最简单的方法,可以避免太多的捕获。事实上,这不是-因为将使用
C:/wamp/www/xxx/score/page/
omg
$output=substr($string,strpos($string,“/local/”)+strpos($string,/core/”)+strpos($string,/score/)+1)
如果
$string='C:/wamplocal/www/xxx/local/page/,则此操作将失败。你应该找到
/local/
的位置,不仅仅是
local/
@Jerry dam:p我知道我错过了什么,但从我的角度看这太愚蠢了:p谢谢,这取决于你怎么看。如果您认为有必要,请添加
/
,但不要把我的时间浪费在琐碎的事情上。该正则表达式也会因
C:/wamp/www/xxx/local/page/local/file
而失败。不常见,但也不是不可能。我确信
www
xxx
都是示例字符串,可以是任何字符。。。因此,
str\u replace
在这里不起作用。
preg_replace('/.*(core|local)/', "$1", $string);
<?
    $dir = "C:/wamp/www/xxx/core/page/";
    preg_match("#^.*?/((?:local|core).*/)$#i",$dir,$match);
    echo $match[1];
?>
$string = 'C:/wamp/www/xxx/local/page/';
$output = str_replace('C:/wamp/www/xxx/' , '' , $string);
var_dump($output);
preg_replace('/.*(core|local)/', "$1", $string);