2015-01-22 3 views
-2

문자열이 "SELECTOR('(namespace=''ar.com.osde.reintegros'' and eventname=''generacionReintegro'')')"입니다.Java에서 정규 표현식이 작동하지 않습니다.

"SELECTOR("")" 사이의 문자열을 반환해야하는 경우 결과는 '(namespace=''ar.com.osde.reintegros'' and eventname=''generacionReintegro'')'이어야합니다. 정규 표현식으로

내 코드는 다음과 같습니다 TXT는 = "SELECTOR('(namespace=''ar.com.osde.reintegros'' and eventname=''generacionReintegro'')')"

그러나이 항상 null을 반환

public static String extractSelector(String txt){ 
    Pattern pattern = Pattern.compile("^SELECTOR\\((.*)\\)$"); 
    Matcher m = pattern.matcher(txt); 
    String s = null; 
    while (m.find()) { 
     s = m.group(1); 
    } 
    return s; 
} 

곳. 왜 그런가요?

+5

이 코드는 정상적으로 보입니다. 문제는 아마도 코드의 다른 곳에서 발생했을 수 있습니다. – Reimeus

+0

코드가 작동합니다. http://ideone.com/0SnJKM –

+1

숨겨진 문자 또는 공백이 맨 끝에 있거나 시작 부분에있을 수 있습니까? 너의 끈? 'txt' 대신'txt.trim()'을 사용해보십시오. – RealSkeptic

답변

-1

jdoodle은 코드 일부가 작동한다는 것을 보여줍니다 (txt에 대한 선언 만 추가하고 return 문은 제거함). 그 전에는 txt으로 수행 한 작업이 없습니까? 코드 감안할 때

는 유일한 설명은 (따라서 find이 항상 false입니다) 이것은 while -loop 때문에 전혀 실행되지 않습니다 ... txt 완전히 패턴과 일치하지 않습니다.

아마도 SELECTOR 사이의 공백과 여는 대괄호 ( 사이에 공백이있을 수 있습니다. 아마도 SELECTOR은 소문자로 입력 할 수 있습니다. 이것을 디버그하기 위해서는 아마도 다음과 같이 쓸 수 있습니다.

System.out.println("\""+txt+"\""); 

실제로 일치시키기 전에 또는 IDE의 디버거 기능을 사용하여이 작업을 수행하십시오. 따옴표는 공백을보다 명확하게 만드는 데 사용됩니다.

+1

이것은 설명이 아니라 대답입니다. –

+0

@BrandonBuck : 디버깅 방법에 대한 조언으로 업데이트했습니다. 문제를 완전히 진단 할 수있는 방법을 제공하기 때문에이 문제는 의견 이상의 의미입니다 ... –

+0

문제를 해결할 수있는 방법을 제공하지 않으면 (디버깅이 대답이 아니라 권장 사항입니다) 여전히 대답이 아닙니다. –

관련 문제