2012-07-27 68 views
1
$data = array(
    'core.*', 
    'handlers.player.profile', 
    'vendor.dummy\.test' 
); 

$re = '/(?!<\\\\)\./'; 

foreach ($data as $path) { 
    $path = __DIR__ . DS . preg_replace($re, DS, $path) . '.php'; 
    echo "$path <BR>"; 
} 

如何定义regural表达式来执行\.序列不被转换为目录分隔符(DS是我的项目中的DIRECTORY_SEPARATOR的快捷方式)?如何正确编写正则表达式?

+0

当你发现自己的PHP已经知道'DIRECTORY_SEPARATOR'。重新定义已经存在的标识符是不好的做法,特别是当唯一的原因是安全字符时。但是,这里应该发生什么?你为什么不用'/',它理解_every_ OS? – KingCrunch 2012-07-27 07:59:14

+0

我知道每个操作系统都支持'''''',但PHP会将文件/目录操作中的斜杠转换为操作系统样式。例如,如果我将使用'''fopen('./foo/bar.php','r');''''PHP解释器会将''''''''转换为''''''在Windows上执行。 – Miraage 2012-07-27 08:02:23

回答

0

更新,根据评论:

php > var_dump(preg_replace('/(?<=[^\\\\])\./', DIRECTORY_SEPARATOR, 'vendor.dummy\.test')); 
string(18) "vendor/dummy\.test" 
+0

你可以很容易地在codepad.org – Miraage 2012-07-27 08:09:35

+0

...或'php -a' – Narf 2012-07-27 08:17:44

+0

测试你的模式无论如何不起作用。 – Miraage 2012-07-27 08:36:57