RegEx a *是否匹配所有字符串?
我有以下代码:RegEx a *是否匹配所有字符串?
string rex = "a*";
string txt = "cvb";
Regex regex = new Regex(rex);
Console.WriteLine("Success:" + regex.IsMatch(txt));
此代码返回总是真正。 我认为模式a *只会匹配:“”,“a”,“aa”,“aaa ....”。
我测试了这种情况here。
而同样的例子不匹配。
在一个正则表达式的星形表示前述项目的零个或多个occurrances”。
在这种情况下,prededing产品在“正则表达式”中没有别的东西
因此,这个正则表达式表示“零个或多个'个'字符'
既然您声明您期望与您的a*
匹配'a','aa'或'aaa',那么您可能想要的不是星星而是一个加号。这将表明“一个或多个前面的项目”。
[编辑]
由于@Bindy说,如果你想匹配一个空字符串,以及任意数量的“一的(我错过了一个点),那么你就需要也符合该。
在这种情况下,@ Bindy的解决方案将工作。
另外,使用a+
的解决方案是这样的:
(a+|^$)
这将匹配一个或更多的“一的,或一个空字符串。请注意,这与@ Bindy的解决方案不同,因为他的解决方案只匹配字符串只包含'a'而没有其他内容,而我的匹配任何包含一个或多个'a'或空字符串的字符串。
你的例子并没有真正涵盖这些将是你想要的东西(我的预感是你indended更接近于@ Bindy的答案不是这个,但我觉得我还是应该在这里新增)
如果你把在RegexPlanet仔细一看结果,你会看到那场比赛,而matches()
方法失败,则find()
和lookingAt()
均返回true
。 matches()
隐含在两端的匹配,如果你写了^a*$
。lookingAt()
仅在开始处自动锚定匹配,而find()根本不锚定。
当然,这些都是Java方法,这是RegexPlanet使用的正则表达式。 .NET的IsMatch()
方法相当于Java的find()
,并且它没有等效的matches()
或lookingAt()
(并且不需要它们)。如果你想要匹配的锚定,你必须自己锚定它。
啊。是。这会得到“+1:有洞察力”。这就很好地解释了OP的困惑是如何产生的。 – Spudley 2011-04-27 15:54:45
在您链接到的测试网站上,它确实显示find()可以用于该组合。 – 2011-04-27 15:29:55