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);