RegEx的行为很奇怪.我错过了什么

本文关键字:错过了 什么 RegEx | 更新日期: 2023-09-27 17:58:16

我正在检查StringPatterns。这是RegEx:

Regex regEx = new Regex("(''d{4}/''d{1})");

文本示例如下:1234/5,1234/6,1234/8。一切都很好,直到出现类似"1234/89"的字符串,并且匹配的结果仍然为真。我错过了什么?我也有这个RegEx:

Regex regEx = new Regex("(''d{4}/''d{1}''W)");

问题是,这个例子中有我提到的不匹配的例子,因此将其标记为错误。

RegEx的行为很奇怪.我错过了什么

您缺少这样一个事实,即regex应该始终与整个字符串匹配,但在您的情况下,甚至字符串的一部分也匹配。使用起始/结束锚点:

^(''d{4}/''d{1})$
static void Code () {
    Regex regEx = new Regex(@"('d{4}/'d{1,2})");
    foreach (string input in new string [] {
        "1234/5", "1234/6", "1234/8", "1234/89"
    })
        Console.WriteLine (regEx.IsMatch (input));
    /*
        True
        True
        True
        True
    */
}