preq_match是否应该返回true以便对某些东西进行测试?
$needle = "";
$haystack = "test";
$result = preg_match("/" . $needle . "/i", $haystack);
我希望$result
为0
,但它是1
。
从逻辑上讲,对某些东西进行测试不会产生任何结果......这首歌是怎么回事?什么都不会留下任何东西......得到一些东西......如果你想和我在一起!。
在我对某些东西进行测试之前,我不想进行预先测试以确保没有任何东西:-)。嗯......如果我尝试的话,我不认为我会更加困惑。
答案 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
之后,以及每个连续字母之间。所以合乎逻辑的结果就是你得到的。