2016-10-25 5 views
-1

\\s.*\\s|\\s이 문자열의 시작 부분 및/또는 끝 부분에 공백 (선택 사항, 임의 개수의 공백)을 허용하지 않는이 정규 표현식을 사용했습니다. . 내 정규식에 잘못된거야 어디문자열 내용에 공백 및 공백을 허용하는 정규식

String regex = "\\s.*\\s|\\s"; 
System.out.println("Hello World".matches(regex)); -> FALSE 
System.out.println(" Hello World ".matches(regex)); -> TRUE 
System.out.println(" Hello World".matches(regex)); -> FALSE 
System.out.println("Hello World ".matches(regex)); -> FALSE 

도와주세요,

+2

정규 표현식의 문제점을 명확히 설명해 주시겠습니까? 위의 코드는 주어진 정규식 당 적절한 값을 보여줍니다. 너는 무엇을 기대 하느냐? 어쩌면, 마지막'\ s'는'''과 일치하도록 수량화되어야합니다.''\\ s. * \\ s | \\ s * "' –

+2

아마''(? s) \\ s. * |. * \\ s | \\ s * "'] (http://ideone.com/J1vtGv)는 당신이 추구하는 것입니까? –

+1

의견이 있으십니까? 내 마지막 제안이 필요한 것입니까? –

답변

0

다음 패턴이 나를 위해 일한 말해 :

@Test 
public void testRegex() { 
    final String regex = "\\s*.+\\s*"; 
    assertTrue(Pattern.matches(regex, "Hello World")); 
    assertTrue(Pattern.matches(regex, " Hello World")); 
    assertTrue(Pattern.matches(regex, " Hello World ")); 
    assertTrue(Pattern.matches(regex, "Hello World ")); 
    assertTrue(Pattern.matches(regex, " ")); 
} 

* 문자는 앞의 값의 0 개 이상의 일치 이 경우 공백 (\ s). 그래서 정규 표현식의 앞과 끝에있는 \ s *는 시작이나 끝 부분에 공백 문자를 허용합니다. 그. +는 모든 문자와 일치하고 +는 하나 이상의 문자를 의미하므로 +.는 공백 사이의 중간을 허용합니다.

내 정규 표현식을 사용하면 ""와 완벽하게 일치합니다. 귀하의 요구에 더 잘 부합하기 위해 더 많은 요구 사항을 파악해야합니다.

+0

'\\ s *. \\ s *'('. +') 정규 표현식으로, 줄 바꿈이없고 하나 이상의 문자가없는 문자열이 일치합니다. –

+0

Wiktor에 동의하지만,이 정규 표현식을 보유하고있는 요청 변수에는 줄 바꿈이 없습니다. – Woody

관련 문제