[英]Simple C# regex question
問題 :如果給定Regex
匹配整個字符串,如何測試的最簡單方法是什么?
一個例子:例如,給定Regex re = new Regex(".");
我想測試給定的輸入字符串是否只有一個字符使用此正則表達式re
。 我怎么做 ?
換句話說 :我正在尋找類Regex
方法,它類似於Java類Matcher
中的方法matches()
(“嘗試將整個區域與模式匹配。”)。
編輯: 這個問題不是關於獲取某些string
長度。 問題是如何將整個字符串與常規表達式匹配。 此處使用的示例僅用於演示目的(通常每個人都會檢查Length
屬性以識別一個字符串)。
如果你被允許改變正則表達式,你應該用^( ... )$
來包圍它。 您可以在運行時執行此操作,如下所示:
string newRe = new Regex("^(" + re.ToString() + ")$");
這里的括號是必要的,以防止創建像^a|ab$
這樣的正則表達式,它不會做你想要的。 此正則表達式匹配以a
開頭a
任何字符串或以ab
結尾的任何字符串。
如果您不想更改正則表達式,可以檢查Match.Value.Length == input.Length
。 這是ASP.NET正則表達式驗證器中使用的方法。 請在此處查看我的答案以獲得更全面的解釋。
請注意,此方法可能會導致一些您應該注意的奇怪問題。 正則表達式“a | ab”將匹配字符串'ab',但匹配的值將僅為“a”。 因此即使這個正則表達式可以匹配整個字符串,它也沒有。 文檔中有關於此的警告。
使用錨定模式
Regex re = new Regex("^.$");
測試字符串的長度我會檢查.Length
屬性雖然( str.Length == 1
)...
"b".Length == 1
是一個比...更好的候選人
Regex.IsMatch("b", "^.$")
您添加“字符串開頭”和“字符串結束”錨點
^.$
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.