2011-03-29 16 views
14

Poszukuję wyrażenia regularnego pasującego do następującego -100..100:0.01. Znaczenie tego wyrażenia jest takie, że wartość może wzrosnąć o 0,01 i znajdować się w zakresie od -100 do 100.wyrażenie regularne w iOS

Każda pomoc?

+1

Co oznacza "chcesz zrozumieć tę rzecz w wyrażeniu regularnym"? –

+0

chcesz uzyskać wyrażenie regularne, które mogę ocenić w mojej aplikacji na iOS. – Cannon

+0

Czy "-100..100: 0.01" jest dosłownym przedstawieniem, czy możesz podać kilka przykładów. W przeciwnym razie jest to strata czasu. – sln

Odpowiedz

10
(\b|-)(100(\.0+)?|[1-9]?[0-9](\.[0-9]{1,2})?\b 

Objaśnienie:

(\b|-)  # word boundary or - 
(   # Either match 
100  # 100 
(\.0+)? # optionally followed by .00.... 
|   # or match 
[1-9]?  # optional "tens" digit 
[0-9]  # required "ones" digit 
(   # Try to match 
    \.  # a dot 
    [0-9]{1,2}# followed by one or two digits 
)?   # all of this optionally 
)   # End of alternation 
\b   # Match a word boundary (make sure the number stops here). 
+0

Ewaluator wyrażeń regularnych iOS NSPredicate nie rozumie/b i sekwencje escape :( – Cannon

+0

Próbowałem [0-9] {3}. [0-9] {2}, ale nie rozwiązuje mojego problemu. – Cannon

+0

+1 dla ładny układ –

1
  if(val>= -100 && val <= 100) 
    { 
     NSString* valregex = @"^[+|-]*[0-9]*.[0-9]{1,2}"; 
     NSPredicate* valtest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", valregex]; 
     ret = [valtest evaluateWithObject:txtLastname.text]; 
     if (!ret) 
     { 
      [alert setMessage:NSLocalizedString(@"More than 2 decimals", @"")]; 
      [alert show];  
     } 
    } 

działa dobrze .. thnx za wysiłki facetów!

2

Dlaczego chcesz używać wyrażeń regularnych? Dlaczego nie po prostu zrobić coś jak (w Pseudokod):

is number between -100 and 100? 
    yes: 
    multiply number by 100 
    is number an integer? 
     yes: you win! 
     no: you don't win! 
    no: 
    you don't win! 
30

Można użyć NSRegularExpression zamiast. To nie obsługuje \b, btw, choć trzeba uciec w ciągu:

NSString *regex = @"\\b-?1?[0-9]{2}(\\.[0-9]{1,2})?\\b"; 

Choć myślę \\W byłoby lepszym pomysłem, ponieważ \\b bałagan wykrywania znak ujemny w stosunku do liczby.

miejmy nadzieję lepszym przykładem:

NSString *string = <...your source string...>; 
NSError *error = NULL; 

NSRegularExpression *regex = [NSRegularExpression 
    regularExpressionWithPattern:@"\\W-?1?[0-9]{2}(\\.[0-9]{1,2})?\\W" 
         options:0 
         error:&error]; 

NSRange range = [regex rangeOfFirstMatchInString:string 
           options:0 
           range:NSMakeRange(0, [string length])]; 
NSString *result = [string substringWithRange:range]; 

Mam nadzieję, że to pomaga. :)

EDYCJA: poprawiono w oparciu o poniższy komentarz.

+2

'Zakres NSRange *" powinien być 'zasięg NSRange' – Arnaud