正则表达式中有关*运算符的混淆

时间:2018-06-20 13:51:06

标签: regex regular-language

我知道*运算符表示前面字符的任何数字出现。

因此,表达式ab *会生成诸如“ ab”,“ abab”等之类的字符串。但是它还会生成字符串“ a”,但我不明白这种逻辑。 *运算符只考虑它前面的1个字符是否是该操作。因此,在上述示例中,使用此逻辑*操作仅适用于'b',并且b重复了0次,因此生成了结果字符串“ a”。请帮忙。

编辑:ab *不会像我上面提到的那样生成类似“ abab”的字符串。它仅生成诸如ab,abb,abbb等的字符串

2 个答案:

答案 0 :(得分:3)

  

因此,表达式MemoryPhotosSource会生成诸如“ ab”,“ abab”等的字符串

那是不正确的。 ab*仅匹配ab*aababbabbb,...

  

*运算符仅考虑其前面的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的这一部分比我更好地解释了。