所以*
本身意味着重复前一项零次或多次。 *
的输出不算什么。那么**
呢?这给出了一个输出,但是如何匹配零次或多次没有任何东西?你能解释一下吗? ?*
相同:?
之前没有任何内容,所以这不是正确的吗?如何匹配零次或多次没有任何东西?
mugbear:~# grep '*' emptyspace
mugbear:~# grep '**' emptyspace
line1
line2
line4
line5
line7
mugbear:~# grep '?' emptyspace
mugbear:~# grep '?*' emptyspace
line1
line2
line4
line5
line7
答案 0 :(得分:2)
*
通常不具有魔力
您提出的问题的答案并未完全明确,因此几乎肯定会依赖于特定的RE实施。
就此而言,甚至没有任何接近单一标准RE的变化,并且变化的解释不是略有不同,而是模式定义截然不同。
起初,有经典的grep / sed / ed / awk。最终出现了一组相当扩展的模式,并被Perl和其他语言所广泛使用。
这些实现中的一些会尝试注意角色由于其位置而无法成为魔法。
因此,普通*
可能会搜索实际的*
和**
,然后搜索0个或更多*
个字符。 (并且每个字符串都有0或更多...)
注意:是的,有一个Posix标准,但影响很小,可以忽略它。
答案 1 :(得分:1)
每个字符串包含0或更多的每个其他字符串的重复。
答案 2 :(得分:0)
?或者*他们自己什么也不做,因为他们没有什么可以处理的。 **和?*是不好的形式,不应该使用。正确编译正则表达式字符串的任何内容都应该在出现时出错。严格的编译器会出错吗?或*也是一个人。