Как поймать специальные указанные ** символы ** в 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*

будет по-прежнему читаться как «Лиса забежала за угол за угол», хотя этого не должно быть.

Любые идеи?


person 3254523    schedule 13.01.2014    source источник
comment
Вот почему вы не должны использовать для этого регулярное выражение. Вы ошиблись. В частности, [^**] не делает того, что вы думаете. Просто используйте rangeOfString: (или componentsSeparatedByString: вместе с componentsJoinedByString:), чтобы получить подстроку между двумя экземплярами **.   -  person    schedule 14.01.2014
comment
@H2CO3 хотел бы увидеть пример того, о чем вы говорите.   -  person 3254523    schedule 14.01.2014
comment
@ User3294729579346597634, вы можете погуглить и проверить, что вам только что сказал H2CO3. Он дал вам точные названия методов. Это не так сложно   -  person Sam B    schedule 14.01.2014


Ответы (1)


Возможно, это может помочь вам:

http://regex101.com/r/eF6pJ8

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

person Vasili Syrakis    schedule 13.01.2014
comment
к сожалению, это не работает для меня, я получаю предупреждение Unknown Escape Sequence - person 3254523; 14.01.2014
comment
Возможно, вам придется экранировать обратную косую черту: \\*{2}([^*]*)\\*{2} - person Vasili Syrakis; 14.01.2014