Есть ли способ написать шаблон регулярного выражения, который будет создавать одну или две группы на основе входного текста. (То есть)Регулярное выражение, определяющее необязательные группы захвата?
// ONE
NSString *pattern = @""; ([0-9]+).([0-9]+)
NSString *inputText = @"ThisIs MyTest72.56String";
// OUTPUT match = 72.56, group1 = 72, group2 = 56
То, что я пытаюсь получить это:
// TWO
NSString *pattern = @""; ([0-9]+).([0-9]+)
NSString *inputText = @"ThisIs MyTest72String";
// OUTPUT match = 72, group1 = 72, group2 = Empty
Я думал, что я мог бы использовать (:), но это просто удаляет группу
То, что я после того, как есть :
Text = "ThisIs MyTest72String"
Match = 72
Group1 = 72
Group2 = Empty
Text = "ThisIs MyTest72.56String"
Match = 72.56
Group1 = 72
Group2 = 56
EDIT:
Такие работы, хотя я бы хотел избавиться от «S» в начальном матче.
Pattern = ([0-9]+).([0-9]*)
Text = "ThisIs MyTest72String"
Match = 72S
Group1 = 72 //RangeAtIndex:1 {13,2}
Group2 = Empty //RangeAtIndex:2 {16,0}
Text = "ThisIs MyTest72.56String"
Match = 72.56
Group1 = 72
Group2 = 56
Это близко, но в случае «пустой» (группа_2) Я ожидал rangeAtIndex: 2 равным NSNotFound. Документы говорят, что «Диапазон {NSNotFound, 0} возвращается, если одна из групп захвата не участвовала в этом конкретном матче« ли пустая группа не считается «Не участвует»?
Спасибо рррр, я новичок в регулярных выражениях, но я вижу, Что король нет. Один последний вопрос: «Трейлинг»? похоже, позволяет первой группе соответствовать сама по себе, можете ли вы объяснить, что именно она делает? – fuzzygoat
Это квантификатор, который делает предыдущий элемент в регулярном выражении (в данном случае всей не захваченной группе) необязательным, чтобы он мог представлять 0 или 1 раз. – rrrr
Понял, спасибо. – fuzzygoat