0

我有一些网址,例如:

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。但在我的情况下,我只需要第一个和第二个版本,以便没有或只出现一次斜杠。

我多次尝试找出正确的方法,但没有结果。

4

2 回答 2

2

只需匹配该字符集(减去 a /),然后是可选的/,然后再次匹配该字符集(可选)。

/^([[:lower:][:digit:]-]+\/?[[:lower:][:digit:]-]*)$/
于 2012-03-06T20:02:24.780 回答
2

您可以使用斜杠作为分隔符来分解字符串 -

$str = "dir-1/dir-2";    
$splitArr = explode('/',$str);
  • 如果结果数组包含多个元素,则存在斜线。
  • 多于两个元素 == 多于一个斜线!
array (
  0 => 'dir-1',
  1 => 'dir-2',
)  

正如您的问题所述,您不是在谈论任何旧的字符串变量,特别是购买 URL,请确保从字符串的开头删除httporhttps协议:

例如: 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!你已经避免使用正则表达式了!

有些人在遇到问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。

于 2012-03-06T20:22:09.400 回答