Php 如何正确地编写regexp?
我应该如何定义要执行的正则表达式\。不转换为目录分隔符DS的序列是我的项目中目录分隔符的快捷方式?已更新,根据注释:Php 如何正确地编写regexp?,php,regex,Php,Regex,我应该如何定义要执行的正则表达式\。不转换为目录分隔符DS的序列是我的项目中目录分隔符的快捷方式?已更新,根据注释: $data = array( 'core.*', 'handlers.player.profile', 'vendor.dummy\.test' ); $re = '/(?!<\\\\)\./'; foreach ($data as $path) { $path = __DIR__ . DS . preg_replace($re, DS,
$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>";
}
正如您所注意到的,PHP已经知道目录分隔符。重新定义已经存在的标识符不是一个好的做法,尤其是当唯一的原因是保护字符时。然而,这里应该发生什么?为什么不继续使用/,它了解每个操作系统?我知道每个操作系统都支持/,但PHP将文件/目录操作中的斜杠转换为操作系统样式。例如,如果我将使用fopen'./foo/bar.php','r';PHP解释器将在Windows上执行之前转换为\对我有效。。。我知道您希望任何`都替换为/`,但前提是前面不加反斜杠,后面不加点。这不对吗?把点转换成DS。若反斜杠在圆点之前,则圆点不应转换为DS。啊。。。我懂了。更新了答案。
php > var_dump(preg_replace('/(?<=[^\\\\])\./', DIRECTORY_SEPARATOR, 'vendor.dummy\.test'));
string(18) "vendor/dummy\.test"