2009-09-24 2 views
5

데이터베이스에서 검색된 일부 패턴으로 정규식 패턴을 작성하려고합니다. 예를C#에서 동적 정규식 패턴 작성하기

string pt= "@\"\\b(" + db.GetPattern + ")\\b\"";   
Regex regex = new Regex(pt, RegexOptions.IgnoreCase | RegexOptions.Compiled); 
return regex.Replace(input, "*"); 

내가 탈출을 시도하지만, 내가이 일을 얻을 수 없었다 들어

. 수동으로 패턴을 빌드하면

Regex regex = new Regex(@"\b(test|test2)\b", RegexOptions.IgnoreCase | RegexOptions.Compiled); 
return regex.Replace(input, "*"); 

과 같이 작동합니다.

답변

18

는 양자 택일

string pt = @"\b(" + db.GetPattern + @")\b"; 

이상을 시도해보십시오

string pt = string.Concat(@"\b(", db.GetPattern, @")\b"); 

기본적인 이유는 예를 들어 줄 패턴 및 구축 문자열이 상당히 다른 점이다. @"foo"과 같은 리터럴 문자열과 같은 것들은 컴파일 후 모든 문자열이 동일하므로 C# 컴파일러에만 해당됩니다. 두 문자열 @"\b""\\b"은 완전히 동일합니다. 유일한 차이점은 C# 컴파일러가 내부의 이스케이프 문자를 평가하는 방법에 있습니다. 즉, 런타임에 사용하는 문자열에 C# 구문을 통합 할 필요가 전혀 없습니다.

는 기본적으로 사용자가 만든 캐릭터 라인은 포함 :

@"\b(test|test2)\b" 

당신은 그래서 @ 부호와 인용 부호와 같은 부분이 정규 표현식에 대한 리터럴했다

\b(test|test2)\b 

패턴을 원하는 반면. 따라서 그것은 일치하지 않을 것입니다.