非零长度字符串(例如"foo"
)是否包含零长度字符串?
换句话说,如果我在""
内搜索"foo"
,那么逻辑结果会是什么?
在第一个字符之前,最后一个字符之后以及任何非零长度字符串的每两个相邻字符之间是否存在零长度字符串是真的吗?
编辑1:现在我考虑一下,如果上述情况属实,那么也可能有多个零长度字符串(甚至是无限长的字符串),其中只有一个。
编辑2:我从一般的角度提问这个问题(只是对形式语言背后逻辑的一个简单怀疑)。但我想知道是否有适用于所有正式语言的固定规则。答案 0 :(得分:1)
是的,如果您以这种方式定义搜索。不同的语言和搜索库可能会也可能不会这样做。请参阅您正在使用的语言或库的文档。
如果您正在编写自己的搜索功能,请确定您希望它的行为方式和记录方式。
据我所知,大多数字符串搜索操作都会匹配非空字符串开头的空字符串。
答案 1 :(得分:0)
根据我的经验,我会说是搜索“”会导致所有结果。从数据库的角度来看,column LIKE '%'
会返回所有记录(假设NULL也被认为是“”)
答案 2 :(得分:0)
这取决于语言,以及技术上定义字符串的内容。如果一个字符串理论上只是一个没有其他字符的字符序列,那么你可以在任何地方找到空字符串,因为你可以做以下事情:
"foo" === "f" + "" + "oo"
"foo" === "" + "f" + "" + "o" + "" + "o" + ""
如果查看字符串的实际实现方式,搜索可能会发生变化。在C中,字符串被实现为包含一个称为空字符的特殊字符 - '\0'
- 在字符序列的末尾以标记字符串的结尾。所以"foo"
实际上是'f', 'o', 'o', '\0'
作为字符序列,因此空字符串实际上不是真正的空 - 它包含空字符作为唯一字符。
考虑到这一点,在其他字符串中搜索字符串将取决于您是否要在搜索中包含空字符。如果你确实包含它,你只会在非空字符串的末尾找到空字符串,因为你将在非空字符串中搜索一个空字符,这将在最后找到。如果你不包含它,你会得到与上面相同的结果,在任何地方都可以找到空字符串。
通常,您不会在搜索中包含空字符。否则,"rob"
在技术上无法找到"acrobat"
,除非它真的是'a', 'c', 'r', 'o', 'b', '\0', 'a', 't', '\0'
答案 3 :(得分:0)
这个简单的jsfiddle表明在java脚本中,字符串"foo"
确实包含空字符串""
,并在搜索时返回true。