我很难弄清楚我对正则表达式的错误。我有一个非常复杂的正则表达式,但为了简化一些东西,这足以解释我自己:
(a*) | (b*)
不确定是否需要括号?然而,这个正则表达式匹配a *但不匹配b *(作为a,aa,...和b,bb,...)。如果我使用+而不是星号,它可以工作,除了它显然不匹配空字符串,它应该。我在没有任何标志的regex101上对此进行了测试。
那么为什么or-operator可以与匹配空字符串的部分一起使用,或者它是否是我在这里出错的其他内容?
答案 0 :(得分:1)
正如评论中所指出的,你的正则表达式 匹配任意数量的a
s(可能为零)或任意数量的b
s(也可能为零)。第一个子表达式匹配空字符串,并且根据正则表达式的味道,这可能意味着没有理由考虑b*
是否匹配。换句话说,对于字符串bbb
,找到的匹配是在这三个a
之前的零b
。
您可以通过在其周围放置标记来验证它可能与您想要匹配的内容完全匹配。 ^
和$
适用于正常情况,但出于演示目的,X((a*)|(b*))X
可能更好:您可以轻松在线验证其与XX
,XaX
匹配,XaaX
,XaaaX
,...,XbX
,XbbX
,XbbbX
,...