我写了一个小型路由系统,但我有问题。我的正则表达式是将斜线作为普通字符串读取,我很困惑如何使它工作。例如:
我定义了将显示个人资料的路由home/[a-zA-Z0-9_]
,但我也定义了home/user/\d
。当我写下第二个案例home/user/45
时,它会写下第一个案例。它将user/45
作为一个字符串。如何使用正则表达式排除/
。
答案 0 :(得分:0)
尝试回家/(?!用户/)[a-zA-Z0-9_] 对于第一种情况
答案 1 :(得分:0)
你尝试过这样的事吗?
[^\/]+
或更好
[a-zA-Z0-9_]+[^\/]+
如果您转到regexr.com并输入字符串(home/user/45
),则只会选择home,user,45
(斜杠/
除外)
答案 2 :(得分:0)
您应该匹配以下模式:
/home\/user\/(\\d+)/
并将其替换为以下内容:
home/user$1
在第一个正则表达式中,我使用了分隔符:斜杠。如果不需要分隔符,请删除第一个和最后一个斜杠。
答案 3 :(得分: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
)
)
?>
答案 4 :(得分:0)
既然你信任正则表达式,你真的应该限制模式。另外一个使模式更具可读性的技巧是使用另一个模式字符:
|^/home/(\w+)/?$|
|^/home/user/(\d+)/?$|