0

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

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

4

5 回答 5

1

你有没有尝试过这样的事情?

[^\/]+

或更好

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

如果您访问regexr.com并输入您的字符串 ( home/user/45),它将仅选择home,user,45(斜线除外/

于 2013-09-10T17:30:28.103 回答
0

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

于 2013-09-10T17:30:23.273 回答
0

您应该匹配以下模式:

/home\/user\/(\\d+)/

并将其替换为以下内容:

home/user$1

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

于 2013-09-10T17:32:40.273 回答
0

尝试其中之一:

<?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
    )
)

?>
于 2013-09-10T17:34:32.650 回答
0

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

|^/home/(\w+)/?$|
|^/home/user/(\d+)/?$|
于 2013-09-10T17:40:35.487 回答