2013-06-12 3 views
1

Я хочу, чтобы соответствовать строкам форм:IOS шаблон регулярного выражения не работает, чтобы соответствовать номеру

123 
.123 
1.123 

и я использую следующую строку для моего регулярного выражения

@"^\\d*(?:\\.\\d+)?$" 

Однако, это соответствует строке следующие формы:

1.2.3 
1..2..3 
123... 

Что не так с моим регулярным выражением? Я использовал ^ и $, потому что я не хочу, чтобы строка содержала ничего, кроме указанных числовых форм.

EDIT:

я зарегистрировал, что соответствует в строке, как 78..7 и обнаружили, что расположение матча 0 и длина 0 с результатом «» подкрепляются. Есть идеи? Должно ли местоположение диапазона быть NSNotFound, если длина равна 0? Я предполагаю, что выражение регулярного выражения отлично, и я могу просто проверить длину, но это кажется ненужной работой.

+0

См. Мой обновленный ответ. – OregonTrail

ответ

1

Попробуйте это регулярное выражение:

^(?<!\.)\d*(\.\d+)?$ 

я добавил отрицательный взгляд, за утверждение, что означает, что ни одна точка не допускается до этого числа. Это должно решить вашу проблему.

+0

Я хочу также соответствовать строкам формы .123. Я использую http://regexpal.com/ для проверки моего регулярного выражения, и мой шаблон должен работать правильно. Я не уверен, почему он не работает в xcode. – user1529956

+0

Хорошо, что я пропустил эту часть, но можно проверить, что тоже добавлю обновление – rekire

+0

Я тоже попробовал его с моим +, и он по-прежнему соответствует шаблонам, как 1 ... 23, 1.2.3 и 123 .. – user1529956

0

Это работает для вас?

@"^\\d*\\.?\\d+$"

Здесь без сбежавших обратной косой черты:

^\d*\.?\d+$

0

Мое предположение, что rekire правильно о $ символ не работает. Если это так, то регулярное выражение действительно соответствует пустой подстроке в начале строки, что объясняет, почему она говорит, что найдено совпадение длины 0 в местоположении 0 вместо NSNotFound.

1

Описание

Это регулярное выражение будет найти действительные положительные действительные числа с или без десятичной точки. подобный 123, .123, 1.123. Выражение может применяться к строке, где каждое тестируемое значение находится в собственной строке или находит числа в середине блока текста. Он также позволит знаки препинания как периоды и запятые непосредственно после номера, но не будет их фиксировать.

(?<=^|\s)\d*\.?\d+(?=[,.;]?(?:\s|$))

enter image description here

Учитывая Строка ввода:

1.2.3 
1..2..3 
128... 
1234 
.123 
1.123 
1...23 
1.2.3 
123... 
I like kittens 345.23, and version 2.3.4 dogs 

Матчи:

1234 
.123 
1.123 
345.23 
+0

Случайный вопрос, как вы создали этот симпатичный график? –

+1

Эй, Мэтт, я использую debuggex.com. Хотя он не поддерживает lookbehinds или атомные группы, он все же удобен для понимания потока выражения. Существует также regexper.com. Они тоже очень хорошо работают, но это не в режиме реального времени, когда вы печатаете. –

0

Это Regex соответствуют ваши строки:

[0-9]*(.){0,1}[0-9]+ 
Смежные вопросы