2014-06-18 3 views
0

나는 정규 표현식을 가진 초보자이므로 사소한 질문이라면 저와 함께하시기 바랍니다. 나는 this을 팔로우하고 있습니다. 내 입력 한 후 위의 식에 있습니다정규 표현식이 서브맵 만들기를 시도하는 이유는 무엇입니까?

<any number of spaces><one or more of alphanumeric character>;<any number of possible spaces> 

경우 내가 경기를 반환 :
나는 나의 입력이 다음과 같은 패턴이 있는지보고 싶어요.

\s*\w+\s*?;\s* 

을 내가 거짓을 받고 결국 "a;" 또는 " a;" 같은 유효한 입력이 있더라도 내가

Regex.IsMatch(input, pattern, RegexOptions.IgnoreCase) 

작업을 수행 할 때 다음과 같이 내가 가진

정규 표현식입니다.

RegEx 도구를 사용하여 검사 할 때 모든 것과 일치하는 것으로 보이고 두 번째 \ s *와 함께 하위 테스트를 찾은 후 다시 하위 일치를 찾지 않습니다. 아무도 내가 왜 거짓말을하는지 설명 할 수 있습니까?

+1

'Console.WriteLine (Regex.IsMatch ("는,"? "\ s에 * \ w + \ S *] \이야 *"@ RegexOptions.IgnoreCase));'나를 위해'true를 반환합니다. 하지만'^ \ s * \ w + \ s *; \ s * $'정규식을 사용합니다. –

+0

@Ulug와 같은 결과를 얻습니다. 'pattern'의 값은'\ s * \ w + \ s *?; \ s *'입니까? 어쩌면 잘못 빠져 나간 것일 수도 있습니다. –

답변

1

다음은 사용자의 필요에 따라 간단하게 작동합니다.

\s*\w+;\s* 

예 :

Console.WriteLine(Regex.IsMatch("a;", @"\s*\w+;\s*")); // True 
Console.WriteLine(Regex.IsMatch(" a;", @"\s*\w+;\s*")); // True 
Console.WriteLine(Regex.IsMatch("a; ", @"\s*\w+;\s*")); // True 
+0

입니다. 감사. 그냥 궁금해서 \ s * \ w + \ s *?; \ s *는 서브 매칭을하고 작동하지 않습니다. – as3rdaccount

+0

@ArunavDev 물음표가 문제의 원인입니다. * 뒤에 오는 물음표는 게으른 일치를 만들어 내 추측은 올바르게 컴파일되지 않는다는 것입니다. –

+0

@ArunavDev 아마도 패턴에 공간이 있었을 것입니다. [여기] (http://ideone.com/SudrpX) – hwnd

1

문제는 중간 용어 : "\ s *?"입니다. 그룹에서 정규식을 읽어야합니다 (모든 공백은 정규식의 일부가 아닌 그룹을 나타냄) : \ s * \ w + \ s *? ; \ s *

무엇을 할 것인가? \ s *?

당신은 \ s * \ w +; \ s * 이어야하며 작동해야합니다.

+0

감사합니다. tradetree. \ s * \ w +; \ s *가 작동합니다. \ s * \ w + \ s *?; \ s *도 작업해야합니다. (\ w도 공백 문자를 처리한다고 생각하십니까?) \ s * \ w + \ s * , 그것은 작동하지 않았다. – as3rdaccount

+0

\ s *를 (를) 생각하는 다른 답변이 있습니까? 그러나 나는 "*?"에 대한 정의가 무엇인지 알지 못하기 때문에 이것을하지 않을 것입니다. 대신 다른 합리적인 대답은 "\ s * \ w + \ s \ *; \ s \ *" – tradetree

관련 문제