2014-01-13 5 views
1

표시된 "**"쌍 사이의 문자를 굵게 만드는 데 문제가 있습니다. 예를 들어,이있는 NSString에서 :NSString에서 ** 표시된 ** 특수 문자를 붙잡고 그 사이에있는 것을 과장하는 법은 무엇입니까?

"The Fox has ran **around** the corner." 

읽어야 여기

내 코드는 "여우는 주위 에게 코너를 운영하고있다"

NSString *questionString = queryString; 
NSMutableAttributedString *mutableAttributedString = [[NSMutableAttributedString alloc] initWithString:questionString]; 

NSRange range = [questionString rangeOfString:@"\\*([^**]+)\\*" options:NSRegularExpressionSearch|NSCaseInsensitiveSearch]; 
if (range.location != NSNotFound) { 
    [mutableAttributedString setAttributes:@{NSFontAttributeName:[UIFont fontWithName:AGHeavyFontName size:size]} range:range]; 
} 

[[mutableAttributedString mutableString] replaceOccurrencesOfString:@"*" withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, queryString.length)]; 

return mutableAttributedString; 

나는 문제 - 데 이 코드는 여전히 한 쌍의 "*"문자로 캐치됩니다. 따라서이 경우

"The fox has ran *around the corner* 

은 여전히 ​​"여우가 주위에 주위를 돌았습니다"라고 읽지 않아야합니다.

아이디어가 있으십니까?

+0

. 너는 그것을 잘못 알고있다. 특히,'[^ **]'은 당신이 생각하는대로하지 않습니다. 'rangeOfString :'(또는'componentsSoaratedByString :'와'componentsJoinedByString :')을 사용하여'**'의 두 인스턴스 사이에 부분 문자열을 얻으십시오. –

+0

@ H2CO3은 당신이 말한 것을보기를 좋아할 것입니다 – 3254523

+1

@ User3294729579346597634 당신은 구글과 H2CO3가 방금 말한 것을 확인할 수 있습니다. 그는 정확한 방법 이름을 알려 줬어. 그게 어렵지 않다 –

답변

2

아마도이 당신을 도울 수 있습니다 : 당신이 그것을 위해 정규식을 사용하지 말아야 이유

http://regex101.com/r/eF6pJ8

\\*{2}([^*]*)\\*{2}

+0

불행히도 이것은 나를 위해 작동하지 않습니다 "알 수없는 이스케이프 시퀀스"경고 – 3254523

+0

다음 백 슬래시를 이스케이프해야 할 수도 있습니다 :'\\ * {2} ([^ *] *) \\ * { 2}' –

+0

감사합니다! – 3254523