preg_match:如果第一个字符是斜杠

4
我尝试找出一个字符串的第一个字符是否为斜杠。
我有这个字符串 /var/www/html
$mystring = "/var/www/html";
$test = preg_match("/^/[.]/", $mystring);

if ($test == 1)
{
    echo "ret = 1";
}
else 
{
    echo "ret = 0";
}

但我总是得到 ret = 0


2
一个非正则表达式的解决方案可能更容易,但你的方法不起作用的原因是你需要转义斜杠,因为你使用它作为分隔符。 - jeroen
1
我明白了,谢谢。我还需要删除方括号 [ ] 才能使其正常工作。 /^\/./ - Black
是的,你原来的正则表达式搜索的是斜杠后面跟着一个点... - jeroen
5个回答

3

试试这个:

<?php
$mystring = "/var/www/html";
$test = preg_match("/^\//", $mystring);

if ($test == 1)
{
    echo "ret = 1";
}
else 
{
    echo "ret = 0";
}

3
几乎正确。但是当你想获取第一个字符时,实际上是 "/^\//" - Ole K
为什么在斜杠前面有一个反斜杠?我需要通过在斜杠前面加上反斜杠来转义斜杠吗? - Black
因为斜杠是表达式的保留字符或分隔符,所以在其前面需要加上反斜杠。反斜杠在分隔符之前是必需的。 - Ren Camp
1
斜杠通常表示正则表达式的开始。因此,如果您想将斜杠用作斜杠,则需要转义正则表达式以使其成为双斜杠。点也是同样的道理,一个点表示任何字符,但反斜杠加点表示点。 - Andreas
1
@RenCamp 正斜杠并不是特殊字符,这里需要转义的原因是因为它被用作定界符。如果使用其他定界符,您就不需要进行转义。 - jeroen

3
您可以简单地使用strpos()来完成这个任务:
<?php
    $mystring = "/var/www/html";
    if(strpos($mystring,"/") === 0){
        echo "ret = 1";
    }else{
        echo "ret = 0";
    }
?>    

1
抱歉,如果我说错了,请问strpos不会搜索/的整个字符串,而不仅仅是第一个字符吗? - Andreas
2
是的,但它会查找给定字符串的位置,在您的情况下是“/”,其位置为0-它会给出第一次出现的位置。 - mitkosoft
1
啊!没错。我没有想到===0。我通常使用strpos与=== false。没有想到函数的“实际”用途 :-) - Andreas

3

您为什么要使用preg_match呢?

您不能使用substr吗?

if (substr($mystring, 0, 1) == "/") {
  echo "ret= 1";
}

2
如果您只想做这件事,您也可以像这样做:

echo $mystring[0] == "/" ? "ret 1" : "ret 0";

不需要真的使用其他函数。

-3

你需要在你的正则表达式中转义 /,因为你已经把它用作了分隔符,所以尝试这样写:

$mystring = "/var/www/html";
$test = preg_match("/^\//", $mystring);

if ($test == 1)
{
    echo "ret = 1";
}
else 
{
    echo "ret = 0";
}

1
@OleK 我发誓,我没有偷你和其他帖子作者的评论和答案 :D - Amit Verma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接