我有以下代碼:RegEx a *是否匹配所有字符串?
string rex = "a*";
string txt = "cvb";
Regex regex = new Regex(rex);
Console.WriteLine("Success:" + regex.IsMatch(txt));
此代碼返回總是真正。 我認爲模式a *只會匹配:「」,「a」,「aa」,「aaa ....」。
我測試了這種情況here。
而同樣的例子不匹配。
我有以下代碼: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