RegEx a *匹配所有字符串吗?

时间:2011-04-27 15:15:57

标签: c# .net regex

我有以下代码:

string rex = "a*";
string txt = "cvb";
Regex regex = new Regex(rex);
Console.WriteLine("Success:" + regex.IsMatch(txt));

此代码始终返回 true 。 我认为a *模式只能匹配:“”,“a”,“aa”,“aaa ....”。

我测试了这种情况here

同样的例子并不匹配。

5 个答案:

答案 0 :(得分:12)

^a*$只会出现这种情况。由于您没有使用开始和结束锚点,因此它将始终与任何字符串中的“无”匹配。

答案 1 :(得分:6)

如果您仔细查看RegexPlanet结果,您会看到,matches()方法失败时,find()lookingAt()都会返回truematches()隐含地在两端锚定匹配,就好像你已经写了^a*$一样。 lookingAt()仅在开头自动锚定匹配,而find()根本不会锚定它。

当然,这些都是Java方法,它们是RegexPlanet使用的正则表达式。 .NET的IsMatch()方法等同于Java find(),它没有matches()lookingAt()的等价物(并且不需要它们)。如果你希望匹配锚定,你必须自己锚定它。

答案 2 :(得分:3)

正则表达式中的星号表示前一项的出现次数为零或更多。

在这种情况下,预定项是“a”字符,正则表达式中没有其他内容。

因此,这个正则表达式表示“零个或多个”字符。

由于您声明您希望将“a”,“aa”或“aaa”与您的a*匹配,那么您可能想要的而不是明星是一个加号。这将表示“前面一项或多项”。

[编辑]

正如@Bindy所说,如果你想匹配一个空字符串以及任何数量的'a'(我错过了一个点),那么你还需要匹配它。

在这种情况下,@ Bindy的解决方案可行。

或者,使用a+的解决方案如下所示:

(a+|^$)

这将匹配一个或多个'a'或空字符串。请注意,这与@Bindy的解决方案不同,因为他的解决方案仅匹配字符串仅包含'a'而不包含任何其他内容,而mine将匹配包含一个或多个'a'或空字符串的任何字符串。

你的例子并没有真正涵盖那些你想要的东西(我的预感是你更接近@Bindy的答案而不是这个,但我觉得我还应该在这里添加它)

答案 3 :(得分:-1)

尝试使用下一个

^a*$

似乎work

答案 4 :(得分:-1)

a *告诉Regex解释器匹配0到多次。我相信你想要的是a.*,或者如果你想让它影响整个字符串,只有当第一个字符是a时匹配,那么$a.*^