字符串中没有或一个斜杠的正则表达式

时间:2012-03-06 19:58:07

标签: php regex slash

我有一些网址:

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:]\-\/]+)$/

因此正则表达式匹配所有网址。但在我的情况下,我只需要第一个和第二个版本,因此没有或仅出现一次斜杠。

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

2 个答案:

答案 0 :(得分:2)

只需匹配该组字符(减去/),然后选择/,然后再次匹配(可选)。

/^([[:lower:][:digit:]-]+\/?[[:lower:][:digit:]-]*)$/

答案 1 :(得分:2)

你可以使用斜杠作为分隔符 -

来爆炸字符串
$str = "dir-1/dir-2";    
$splitArr = explode('/',$str);
  • 如果生成的数组有多个元素,则会出现斜杠。
  • 超过两个元素==多个斜杠!
array (
  0 => 'dir-1',
  1 => 'dir-2',
)  

正如您的问题所述,您不是在谈论any old string变量专门购买网址,请务必从字符串的开头删除httphttps协议:

例如:https://marvin.com/dir-1/dir-2

您可以使用$_SERVER[REQUEST_URI]变量 - 这会返回相对于网站DOCUMENT ROOT的当前网址。

因此$_SERVER[REQUEST_URI]的{​​{1}}将是:

https://marvin.com/dir-1/dir-2 (看起来很熟悉?)

/dir-1/dir-2后,您还可以使用explode()删除初始的 root 斜杠和
HEY PRESTO!您已避免使用正则表达式!

Some people, when confronted with a problem, think “I know, I'll use regular expressions.” Now they have two problems.