2015-01-28 2 views
0

이 코드는 마지막 ID를 기반으로 새 ID를 생성하는 데 사용됩니다. 이전에 D0001, D0002 ("^ \ D +") 등등 ...에 대한 ID를 생성 할 때 아무런 문제가 없습니다. 하지만 지금은 C0001, C0002에 대한 표현이 잘못되었습니다 ("^ \ C +") .... 영어로 죄송합니다.정규식 사용시 오류

string autoquery = "select top(1) CommentID from [Comment] order by CommentID DESC"; 
     SqlCommand cmd1 = new SqlCommand(autoquery, cn); 
     cn.Open(); 
     SqlDataReader dr = cmd1.ExecuteReader(); 
     dr.Read(); 
     string autoID = dr["CommentID"].ToString(); 
     var prefix = Regex.Match(autoID, "^\\C+").Value; 
     var number = Regex.Replace(autoID, "^\\C+", ""); 
     var i = int.Parse(number) + 1; 
     var newString = prefix + i.ToString(new string('0', number.Length)); 

     cn.Close(); 

답변

1

어떤 줄이 오류가 발생합니까?

내 생각은 정규식이 더 일치하는 항목을 찾을 수 없습니다 때문에 오류가 라인

var prefix = Regex.Match(autoID, "^\\C+").Value; 
    var number = Regex.Replace(autoID, "^\\C+", ""); 

에 발생하는 것입니다. 정규식에 대한 방어 적 코드에 어떤 일치

var prefix = Regex.Match(autoID, "^\\C+") 
    if (prefix.Success) 
    { 
     var number = Regex.Replace(autoID, "^\\C+", ""); 
     var i = int.Parse(number) + 1; 
     var newString = prefix + i.ToString(new string('0', number.Length)); 
    } 
을 찾지 못하는 경우 그냥 문자 C 또는 D

다른 방법보다는 어떤 경우 아리조나 모든 문자와 일치하도록

var prefix = Regex.Match(autoID, "^[A-Za-z]+").Value; 
    var number = Regex.Replace(autoID, "^[A-Za-z]+", ""); 

로 변경할 것

2
^C\\d+ 

당신은 이것을 시도해야합니다. 당신이 C과 일치시키고 싶다면 당신은 그것을 벗어날 필요가 없습니다. \\C\\d 또는 \\D과 같은 특수 지시어가 될 수 있습니다.