正则表达式:什么都是无中生有?

时间:2010-10-30 03:44:14

标签: regex linux

所以*本身意味着重复前一项零次或多次。 *的输出不算什么。那么**呢?这给出了一个输出,但是如何匹配零次或多次没有任何东西?你能解释一下吗? ?*相同:?之前没有任何内容,所以这不是正确的吗?如何匹配零次或多次没有任何东西?

mugbear:~# grep '*' emptyspace                                                  
mugbear:~# grep '**' emptyspace                                                 
line1
line2

line4
line5

line7
mugbear:~# grep '?' emptyspace
mugbear:~# grep '?*' emptyspace                                         
line1
line2

line4
line5

line7

3 个答案:

答案 0 :(得分:2)

由于其上下文

,前导*通常不具有魔力

您提出的问题的答案并未完全明确,因此几乎肯定会依赖于特定的RE实施。

就此而言,甚至没有任何接近单一标准RE的变化,并且变化的解释不是略有不同,而是模式定义截然不同。

起初,有经典的grep / sed / ed / awk。最终出现了一组相当扩展的模式,并被Perl和其他语言所广泛使用。

这些实现中的一些会尝试注意角色由于其位置而无法成为魔法。

因此,普通*可能会搜索实际的***,然后搜索0个或更多*个字符。 (并且每个字符串都有0或更多...)


注意:是的,有一个Posix标准,但影响很小,可以忽略它。

答案 1 :(得分:1)

每个字符串包含0或更多的每个其他字符串的重复。

答案 2 :(得分:0)

?或者*他们自己什么也不做,因为他们没有什么可以处理的。 **和?*是不好的形式,不应该使用。正确编译正则表达式字符串的任何内容都应该在出现时出错。严格的编译器会出错吗?或*也是一个人。