2015-02-03 9 views
0

Objective-C에서 특정 #tagged 단어와 정확히 일치하는 문자열을 구문 분석하려고합니다. 정규 표현식을 만들고 문제없이 특정 단어를 삭제할 수 있지만 선행 "#"이있는 문자열을 제거하려고하면 작동하지 않습니다.정규식을 사용하여 Objective-C에서 특정 #tag를 제거하십시오.

NSString *originalString = @"This is just a #test that isn't working"; 
NSString *hashTag = @"#test"; 
NSString *placeholder = @"\\b%@\\b"; 
NSString *pattern = [NSString stringWithFormat:placeholder, hashTag]; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil]; 

NSString *modifiedString = [regex stringByReplacingMatchesInString:originalString 
           options:0 
            range:NSMakeRange(0, [originalString length]) 
          withTemplate:@""]; 

문제는 원래 문자열이 문자열 #test을 포함하더라도이 제거되지 점이다 :

여기 내 코드입니다. "#test"를 "test"로 바꾸면 모든 것이 잘 작동하지만 그게 내가하려는 일이 아닙니다. 내가 뭘 놓치고 있니?

답변

2

공백과 # 사이에 단어 문자가 없기 때문에. 둘 다 비 단어 문자입니다. 그래서 난 당신이 시작 \\b

NSString *placeholder = @"%@\\b"; 

또는

사용 부정적인 lookbehind를 제거하는 것이 좋습니다. 비 공백 문자가없는 주장

NSString *placeholder = @"(?<!\\S)%@\\b"; 

(?<!\\S) 부정적인 lookbehind는 경기 전에 존재한다.

정확히 일치하는 문자열을 찾으려면이 @"(?<!\\S)%@(?!\\S)" 정규식을 사용하는 것이 좋습니다. (?!\\S) 공백 문자가 뒤에 나오지 않을 것이라고 주장하는 부정적인 미리보기입니다.

DEMO

+0

이것은 매력처럼 작동했습니다. 대답과 설명에 감사드립니다. – crgt

+0

다행이었습니다. –

0

는이 기능이 충분하지 않을, 정규식을 사용하는 경우에도 필요하다?

[yourstring stringByReplacingOccurrencesOfString:@"#test" withString:@""]; 
+0

이것은 제가 이전에 구현 한 것입니다. 그러나 문자열이 "나는 # 테스트 중"인 것과 같은 경우 실패했습니다. 나는 "나는 그냥 보내고있다" – crgt