#ios #regex #syntax-highlighting #nsregularexpression
#iOS #регулярное выражение #подсветка синтаксиса #nsregularexpression
Вопрос:
Допустим, у меня есть этот текст:
word1 word2 " word3 //" word4
Мне нужно написать регулярное выражение для комментариев. Мое решение сейчас ((//).*(n))
, которое приводит к
регулярное выражение для текста в «» далее ((").*("))
Ответ №1:
Это мое решение. Я знаю, что это может быть лучше. Я знаю о обратной ссылке, но у меня нет опыта работы с этим.
NSRegularExpression *exp = [NSRegularExpression regularExpressionWithPattern:@"((@"|").*?("))"
options:NSRegularExpressionDotMatchesLineSeparators
error:nil];
NSArray *textArr = [exp matchesInString:string options:0 range:NSMakeRange(0, [string length])];
for (NSTextCheckingResult *result in textArr) {
// set color for range
}
// Comments
exp = [NSRegularExpression regularExpressionWithPattern:@"(//[^"n]*)"
options:0
error:nil];
NSArray * arrayComments = [exp matchesInString:string options:0 range:NSMakeRange(0, [string length])];
for (NSTextCheckingResult *resultComment in arrayComments) {
BOOL inside = NO;
for (NSTextCheckingResult *resultText in textArr) {
NSInteger from = resultText.range.location;
NSInteger to = resultText.range.location resultText.range.length;
NSInteger now = resultComment.range.location;
if (from < now amp;amp; now < to) {
inside = YES;
break;
}
}
if (!inside) {
// set color for range
}
}