2012-04-19 4 views
0

내가 일치하도록 노력하고 있어요 (일치하지 않는) \ "\ b를 w +"문자열 내에서 "응용 프로그램 : 태그 \ nPrefix 검색이나 텍스트 :"안드로이드 패턴 매칭

코드는 다음과 같습니다

String s = "Search\nPrefix with tag: app: or text:"; 
SpannableString str = SpannableString.valueOf(s); 
Pattern regex = Pattern.compile("\\b\\w+:"); 
Matcher m = regex.matcher(str); 

while(m.find()) { 
    // do stuff 
} 

이클립스에서 디버거로 코드를 따라 갔고 while 루프가 입력되지 않았습니다. 즉, m.find()는 false를 반환합니다. 내가 바로?는 문자열에서 같은 명시 적 텍스트입니다, 그것은 작동한다 간단

Pattern regex = Pattern.compile("app:"); 

에 정규식을 변경했습니다. 그러나 여전히 일치가 없습니다. 문자열의 개행 문자에 도달하면 정규식 일치가 중지되는 것으로 생각됩니다. 그리고 어쨌든 matcher가 전체 문자열을 스캔하도록 알려주는 깃발이나 무언가가 있어야합니다.

+0

정상적으로 작동해야합니다. 어쩌면'SpannableString'을 좋아하지 않을 것입니다.'Matcher m = regex.matcher (s);' – zapl

+0

그냥 문자열을 시도했는데 똑같습니다. 나는 spannable을 필요로한다. 왜냐하면 나는 match를 color하고 싶기 때문에, m.find()마다 m.start()와 m.end()가 필요하다. – ilomambo

+1

내 실수. 나는 여기에 그것을 보여주기 위해 코드를 단순화 시켰지만, 실제로 while 조건은 m.find() && --count> 0이고 count가 원인이었다. 정규식은 괜찮 았어. 결론은 : "일하기가 너무 힘들면 잠자 요." – ilomambo

답변

0

내 실수입니다.
는 여기를 표시하는 코드를 단순화, 그러나 실제로있는 동안의 조건은

while(m.find() && --count>0) 

은 범인이었다. 정규식은 괜찮 았어.

결론은 다음과 같습니다. "너무 피곤하면 일하러 가야합니다."

+0

ㅎ. 게시 할 때 코드를 단순화해서는 안됩니다. 이러한 실수가 근본적인 문제인 것은 매우 일반적인 일입니다. p – keyser

+0

@ Keyser, 코드를 단순화 할 때 이런 종류의 실수가 일반적이라는 것은 당연합니다. 반면에 복잡한 함수와 호출을 가진 매우 긴 코드를 가지고있을 때, 잠재적으로 사람들은 관련없는 코드를 스스로 필터링하기 위해 시간과 인내심을 갖지 않을 것이고 질문을 이해하려고 노력하지 않을 것이라는 두려움이 있습니다. 특히 코드의 아주 간단한 부분을 대상으로 할 때 특히 그렇습니다. 나는 단순화하는 것이 좋습니다, 당신은 단지 그것을 올바르게해야한다고 생각합니다; 네가 그렇게하지 않으면 나는 여기서 일어난 일이 일어난다. – ilomambo

+0

예, 필요한 것은 MWE (최소한의 실제 예)입니다. – keyser