1

私はループ関数からこれらのタイプの結果を持っています、

C:/wamp/www/xxx/core/page/
C:/wamp/www/xxx/local/page/

しかし、 coreまたはlocal の前に何かを削除するにはどうすればよいので、これらのみを取得します。

core/page/
local/page/

を使用strstrしていますが、固定キーワードのみを検索していると思います。一致させるキーワードがさらに 2 つあり、

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

で試しましたpreg_replace

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

それは私に前部を与えます-C:/wamp/www/xxx/

4

6 に答える 6

2

コードは次のようになります。

$sData   = 'C:/wamp/www/xxx/local/page/';
$sResult = preg_replace('/^(.*?)\/(core|local)\/(.*?)$/', '$2/$3', $sData); 
于 2013-09-17T11:39:15.013 に答える
1

preg_replace次のように使用できます。

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

また

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

coreフォルダまたはまで厳密に一致させたい場合はlocal、これを使用できます。

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

Viper-7 デモ


あなたの質問に:

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

これは一致/(core|local)/.*して に置き換えられ/ますが、これは実際には探しているものではありません。実際には、この前のものと一致する必要があるためです。ここでの最初の正規表現はその例です。それは前のすべてに一致し(?:core|local)、その後のすべてをキャプチャ グループにキャプチャします。これは、 backreference を使用するときに参照しています$1

そして、投票戦争がここにあるため...マッチにスラッシュを追加しました。キャプチャグループをまったく使用しない場合(ただし、先読みを使用する場合)、使用するメモリが少なくなります。最後の正規表現まで。

于 2013-09-17T11:40:02.093 に答える
1

preg_match ()を使用する

<?
    $dir = "C:/wamp/www/xxx/core/page/";
    preg_match("#^.*?/((?:local|core).*/)$#i",$dir,$match);
    echo $match[1];
?>

文字列の最初のビットが常に同じである場合は、使用できます
echo ltrim($dir, "C:/wamp/www/xxx/");

于 2013-09-17T11:46:15.543 に答える
0
$output = substr($string, strpos($string,'local/')+strpos($string,'core/'));
于 2013-09-17T11:39:52.437 に答える
-5
preg_replace('/.*(core|local)/', "$1", $string);
于 2013-09-17T12:01:00.547 に答える