Monday, 15 July 2013

ios - NSString regex for extracting negative numbers as part of an equation -



ios - NSString regex for extracting negative numbers as part of an equation -

i'm trying match math equation using regex (in objective-c on iphone app), , utilize help in coming regex works sec scenario listed below.

i've created next objective-c code extract equation of form (1÷4) or (-1÷4) if there's negative number ahead of product or divider: (i include here help explain question i'm trying answer)

nsstring* equation = @"1+(-1÷4)"; nsstring* matcher = @"(-){0,1}(\\.|\\d)+(÷|×){1,}"; nsregularexpression *equation_regex = [nsregularexpression regularexpressionwithpattern:matcher options:nsregularexpressioncaseinsensitive error:nil]; while([equation_regex numberofmatchesinstring:working_function options:0 range:nsmakerange(0, [equation length])]) { // regex finds '-1÷4' }

however, falls apart next equation: 3-1÷4 -1 shouldn't extracted since it's not part of 1÷4 in equation.

i've attempted alter regex (with limited regex expertise!) exlucde -1 iff there's number ahead of - via following:

nsstring* equation = @"3-1÷4"; nsstring* matcher = @"((^\\d)(-)){0,1}(\\.|\\d)+(÷|×){1,}"; nsregularexpression *power_regex = [nsregularexpression regularexpressionwithpattern:power_regex_pattern options:nsregularexpressioncaseinsensitive error:nil]; while([power_regex numberofmatchesinstring:working_function options:0 range:nsmakerange(0, [working_function length])]) { }

where regex ((^\\d)(-)){0,1} effort match negative part if there's no leading digit on - (i.e. 1÷4 , not -1÷4), doesn't work, hence question. hope i've explained sufficiently! in advance.

if want avoid matching - if preceded digit, utilize

"((?<!\\d)-)?[\\d.]+[÷×][\\d.]+"

the trailing ? in ((?<!\\d)-)? makes - optional, , if present, negative look-behind (?<!\\d) prevents match if preceded digit.

[\\d.]+ matches 0-9 or . 1 or more times.

note, tested using java.util.regex class, although think nsregularexpression class similar.

edit:

i find hard understand trying do, if trying match negative number if not preceded digit, use

"(?<!\\d)-\\d+(\\.\\d+)?"

ios objective-c regex nsstring

No comments:

Post a Comment