preg_match:应该什么都不匹配?

时间:2011-08-19 23:40:14

标签: php

preq_match是否应该返回true以便对某些东西进行测试?

$needle = ""; 
$haystack = "test";
$result = preg_match("/" . $needle . "/i", $haystack);

我希望$result0,但它是1

从逻辑上讲,对某些东西进行测试不会产生任何结果......这首歌是怎么回事?什么都不会留下任何东西......得到一些东西......如果你想和我在一起!。

在我对某些东西进行测试之前,我不想进行预先测试以确保没有任何东西:-)。嗯......如果我尝试的话,我不认为我会更加困惑。

2 个答案:

答案 0 :(得分:3)

字符串"test"中实际上有几个 nothings。他们(至少在下面看到我的旁边):

<nothing>t<nothing>e<nothing>s<nothing>t<nothing>

这就是为什么你得到1的结果,它发现t之前没有任何东西。

我怀疑你要记错那首歌,或者写这首歌的人不是工程师。什么都没有留下某些东西(假设我们在这里谈论减法操作)。

如果是“从无到有的东西都没有留下任何东西”,那就更有意义了,但是,作为我的肛门保留型人格,我必须坚持认为你不可能从无到有: - )


顺便说一句,我对preg_match_all返回的内容感兴趣。有些人可能会认为它是5(我怀疑它是)但是从某种纯粹的理论观点来看,有些人可能会争辩说,在字符串中的每个点上都存在无数个无意义。我希望PHP的开发人员比这更实用。

答案 1 :(得分:2)

基本上,在该用法中,preg_match测试字符串中给定模式的实例。换句话说,空的正则表达式与空字符串相同。 “test”中是否有空字符串?是;它位于第一个t之前,最后一个t之后,以及每个连续字母之间。所以合乎逻辑的结果就是你得到的。