正则表达式 - 除斜杠以外的所有内容


Regex - everything except slash

我写了小路由系统,但我有问题。我的正则表达式将斜杠读取为普通字符串,我对如何使其工作感到困惑。例如:

我定义了将显示配置文件的路由home/[a-zA-Z0-9_],但我也定义了home/user/'d.当我写下第二个案例时,home/user/45,它会写下第一个案例。它将user/45作为一个字符串。我如何使用正则表达式排除该/

你试过这样的事情吗?

[^'/]+

或更好

[a-zA-Z0-9_]+[^'/]+

如果你去 regexr.com 并输入你的字符串(home/user/45),它将只选择home,user,45(斜杠/除外)

您应该匹配以下模式:

/home'/user'/(''d+)/

并将其替换为以下内容:

home/user$1

在第一个正则表达式中,我使用了一个分隔符:斜杠。如果不需要分隔符,请删除第一个和最后一个斜杠。

试试home/(?!user/)[a-zA-Z0-9_]对于第一种情况

尝试以下方法之一:

<?php
$path = '/home/user/45';
preg_match_all('/home'/('w+)/', $path, $matches);
/* Would set $matches to Array:
(
[0] => Array
    (
        [0] => home/user
    )
[1] => Array
    (
        [0] => user
    )
)
*/
preg_match_all('/home'/('w+)/('d+)/', $path, $matches);
/* Would set $matches to Array:
(
[0] => Array
    (
        [0] => home/user/45
    )
[1] => Array
    (
        [0] => user
    )
[2] => Array
    (
        [0] => 45
    )
)
?>

由于您信任正则表达式,因此您确实应该限制模式。另一个使模式更具可读性的技巧是使用另一个模式字符:

|^/home/('w+)/?$|
|^/home/user/('d+)/?$|