[英]Matching an (easy??) regular expression using C#'s regex
好的,抱歉,這似乎是一個愚蠢的問題,但我無法弄清楚:
我正在嘗試解析一個字符串,只是想檢查它是否只包含以下字符:'0123456789dD+'
我已經嘗試了很多東西,但就是無法弄清楚要使用的正確正則表達式!
Regex oReg = new Regex(@"[\d dD+]+");
oReg.IsMatch("e4");
即使不允許 e 也會返回 true ......我嘗試了很多字符串,包括 Regex("[1234567890 dD+]+") ...
它始終適用於Regex Pal,但不適用於 C#...
請提供建議,我再次道歉,這似乎是一個非常愚蠢的問題
試試這個:
@"^[0-9dD+ ]+$"
開頭和結尾的^
和$
分別表示輸入字符串的開頭和結尾。 因此在開始和結束之間只允許指定的字符。 在您的示例中,如果字符串包含其中一個字符,則正則表達式匹配,即使它也包含其他字符。
@comments:謝謝,我修復了缺少的+
和空格。
糟糕,您忘記了界限,請嘗試:
Regex oReg = new Regex(@"^[0-9dD +]+$");
oReg.IsMatch("e4");
^ 匹配文本流的開頭, $ 匹配文本流的結尾。
它匹配 4; 如果您想要整個字符串的完整匹配,您需要 ^ 和 $ 來終止正則表達式 - 即
Regex re = new Regex(@"^[\d dD+]+$");
Console.WriteLine(re.IsMatch("e4"));
Console.WriteLine(re.IsMatch("4"));
這是因為正則表達式也可以匹配輸入的部分,在這種情況下它只匹配“e4”的“4”。 如果要匹配整行,則必須用“^”(匹配行開頭)和“$”(匹配行結尾)將正則表達式括起來。
因此,要使您的示例工作,您必須編寫如下:
Regex oReg = new Regex(@"^[\d dD+]+$");
oReg.IsMatch("e4");
我相信它返回 True 是因為它找到了 4。正則表達式中沒有任何內容從結果中排除字母 e。
另一種選擇是反轉所有內容,因此它匹配您不想允許的字符:
Regex oReg = new Regex(@"[^0-9dD+]");
!oReg.IsMatch("e4");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.