我有一些网址,例如:
dir-1
dir-1/dir-2
dir-1/dir-2/dir-3
dir-1/dir-2/dir-3/dir-[n]..and so on..
我当前的正则表达式(使用 PHP)如下所示:
/^([[:lower:][:digit:]\-\/]+)$/
所以正则表达式匹配所有 URL。但在我的情况下,我只需要第一个和第二个版本,以便没有或只出现一次斜杠。
我多次尝试找出正确的方法,但没有结果。
只需匹配该字符集(减去 a /
),然后是可选的/
,然后再次匹配该字符集(可选)。
/^([[:lower:][:digit:]-]+\/?[[:lower:][:digit:]-]*)$/
您可以使用斜杠作为分隔符来分解字符串 -
$str = "dir-1/dir-2";
$splitArr = explode('/',$str);
array (
0 => 'dir-1',
1 => 'dir-2',
)
正如您的问题所述,您不是在谈论任何旧的字符串变量,特别是购买 URL,请确保从字符串的开头删除http
orhttps
协议:
例如: https://marvin.com/dir-1/dir-2
您可能会使用该$_SERVER[REQUEST_URI]
变量 - 这将返回相对于站点的当前 URL DOCUMENT ROOT
。
所以$_SERVER[REQUEST_URI]
ofhttps://marvin.com/dir-1/dir-2
将是:
/dir-1/dir-2
(看起来熟悉?)
之后,explode()
您还可以使用array_shift()
删除初始的根斜线和
HEY PRESTO!你已经避免使用正则表达式了!