我知道*运算符表示前面字符的任何数字出现。
因此,表达式ab *会生成诸如“ ab”,“ abab”等之类的字符串。但是它还会生成字符串“ a”,但我不明白这种逻辑。 *运算符只考虑它前面的1个字符是否是该操作。因此,在上述示例中,使用此逻辑*操作仅适用于'b',并且b重复了0次,因此生成了结果字符串“ a”。请帮忙。
编辑:ab *不会像我上面提到的那样生成类似“ abab”的字符串。它仅生成诸如ab,abb,abbb等的字符串
答案 0 :(得分:3)
因此,表达式
MemoryPhotosSource
会生成诸如“ ab”,“ abab”等的字符串
那是不正确的。 ab*
仅匹配ab*
,a
,ab
,abb
,abbb
,...
*运算符仅考虑其前面的1个字符吗?
完全正确。
如果要将abbbb
应用于*
,则必须将其分组:ab
答案 1 :(得分:2)
我知道*运算符表示前面字符的任何数字出现。
*
运算符表示0个或多个出现的先前表达式。在您的情况下,*
之前的表达式是b
(因为在regexp中,每个字符都是一个表达式)。因此ab*
将匹配
a (0 "b" expressions)
ab (1 "b" expressions)
abbb (2 "b" expressions)
abab (1 "b" expressions followed by extra "ab", but note that `^ab*$` will not match `abab` since it is contained to the start/end of line.)
如果要将ab
匹配零次或更多次,则必须使用ab
这样的括号来将(ab)*
作为表达式来处理。
Wikipedia的这一部分比我更好地解释了。