PHPの正規表現につきまして

定数__FILE__を使うと上手くいきません。
下記の変数から「aaaaa」を抜き出そうとしています。

変数$a="C:/xampp/htdocs/aaaaa/newfile.php";
変数$b=__FILE__;

変数$bと$aが同じ内容が表示される事も確認済みです。
どちらも同じ内容のはずですが、後者の時だけなぜか失敗します。
以下は正規表現で 「aaaaa」 を抜き出すコードです。
<?php
$a="C:/xampp/htdocs/aaaaa/newfile.php";
preg_match('#(?<=htdocs/).*?(?=/)#', $a, $test);
$test2=$test[0];
echo$test2;
?>
※このコードは正常に動作することを確認済みです。
しかし、変数$bでは上手くいきません。

わけがわかりません。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2011/05/31 18:49:38
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:deflation No.2

回答回数1036ベストアンサー獲得回数126

ポイント50pt

おそらくWindowsをご利用でしょうから、__FILE__ に代入されるディレクトリのセパレータは¥(円マーク/バックスラッシュ)になります。

そこで、preg_matchを下記のように修正してください。


preg_match("#(?<=htdocs[/\\\]).*?(?=[/\\\])#", $a, $test);
id:ty2016

ご回答ありがとう御座います。

無事、解決いたしました。

2011/05/31 18:50:51

その他の回答1件)

id:pacochi No.1

回答回数247ベストアンサー獲得回数113

ポイント50pt

パスに「C:/」とあるので Windows ではないかと予測します。

「同じ内容が表示」と書かれていますが、同一の文字列なのではなく「同じ場所を示している」だけだったりしませんか。

Windows では __FILE__ に入っているパスはディレクトリ区切り文字が \ (バックスラッシュ) だったりします。

ですので、正規表現中でスラッシュが使われている場合、

$b = str_replace('\\', '/', $b);

のように、バックスラッシュをスラッシュに変えないと、引っかからないと思います。

id:ty2016

ご回答ありがとう御座います。

無事、解決いたしました。

2011/05/31 18:50:33
id:deflation No.2

回答回数1036ベストアンサー獲得回数126ここでベストアンサー

ポイント50pt

おそらくWindowsをご利用でしょうから、__FILE__ に代入されるディレクトリのセパレータは¥(円マーク/バックスラッシュ)になります。

そこで、preg_matchを下記のように修正してください。


preg_match("#(?<=htdocs[/\\\]).*?(?=[/\\\])#", $a, $test);
id:ty2016

ご回答ありがとう御座います。

無事、解決いたしました。

2011/05/31 18:50:51

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません